re.findall函数的定义
在Python中,re.findall可以简单的用这行代码理解。即返回string
中所有与pattern
相匹配的全部字串,返回的是list
的形式。
findall(pattern, string, flags=0)
re.findall函数使用实例
实例1:查找邮箱后缀
如果不使用正则表达式,可以用find()函数实现:
x = 'ABC gago@gago.me hjghfhgreijhje'
y = x.find('@')
print (y)
# 逗号后面表示从哪里开始
z = x.find(' ',y)
print (z)
o = x[y+1:z]
print (o)
实现的思路很简单,就是通过查找位置来输出正确的结果。一样的结果可以用过re.findall函数来实现,但就不是查找位置了,可以直接查找然后输出结果:
import re
x = 'ABC gago@gago.me hjghfhgreijhje'
y = re.findall('@(\S+)',x)
print (y[0])
如果已经知道一部分特征,例如知道了该每一行的首字母或者首单词,可以通过^
来做进一步确认:
import re
x = 'ABC gago@gago.me hjghfhgreijhje'
# [^ ]的意思是排除掉空格之外剩下所有字符
y = re.findall ('^ABC .*@([^ ]+)',x)
print (y)
实例2:读取文件中每一行的数字并求和
难点在于你不知道一行中有几个数字,可能是0个,也有可能是多个。我一开始没有注意到这个问题,导致结果错误。
import re
hand = open ('text.txt')
numlist = list ()
for line in hand :
line = line.rstrip()
for s in re.findall ('[0-9]+',line):
numlist.append(float(s))
result = int(sum(numlist))
print (result)
倘若使用了正则表达式,其实是不需要去除空格的,仅仅是为了如果要输出文档的话能处理的好看些。这里的[0-9]
也可以用左斜杠d
来直接匹配数字,方法也是一样的:
import re
numlist = []
with open('text.txt', 'r') as file :
for line in file :
for s in re.findall ('\d+',line):
numlist.append(float(s))
print (int(sum(numlist)))
本文采用 CC BY-NC-SA 4.0 协议进行许可,在您遵循此协议的情况下,可以自由地共享与演绎本文。