MENU

Python正则表达式re.findall函数实例

• March 19, 2020 • 学习

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)))
Archives QR Code
QR Code for this page
Tipping QR Code