实验一 如下,对一个txt中的邮箱进行匹配。 首先是txt='Yang.Yuelin@saicmotor.com'

import re
import pprint
txt='Yang Yuelin@saicmotor.com'
a=re.compile(r'[\w\W.]+(@saicmotor\.com',re.I)
s=a.search(txt)
pprint.pprint(s)

s=Yang Yuelin@saicmotor.com 这里要注意的是在【】中‘.’不需要转义符,但是在【】外需要转义符。


实验二 当txt='Yang.Yuelin@saicmotor.com@saicmotor.com'时,重复上面的实验,会发现出现了贪心的问题,s=Yang.Yuelin@saicmotor.com@saicmotor.com。这不是我们想要的,因此需要限制贪心。 这里看上去是后缀出现了两次,但是如果对后缀经行非贪心竟然没有用~怎么办? 如下修改即可:

import re
import pprint
txt='Yang.Yuelin@saicmotor.com@saicmotor.com'
a=re.compile(r'([\w\W.]+?(@saicmotor\.com))',re.I)
s=a.search(txt)
pprint.pprint(s)

原因在于[\w\W.]+将第一个@saicmotor.com匹配进去了,这个问题困惑了我1个小时。


实验三 解决了贪心的问题,开始匹配多个人的邮箱。 txt='Yang Yuelin@saicmotor.com zhu ling@saicmotor.com'

import re
import pprint
txt='Yang.Yuelin@saicmotor.com   zhu.ling@saicmotor.com'
a=re.compile(r'[\w\W.]+?(@saicmotor\.com)',re.I)
s=a.findall(txt)
print(s)

得到的结果是['@saicmotor.com', '@saicmotor.com'] what?! 原因在于那个括号,去掉括号就可以,或者在整个正则表达式外面加括号,因为结果只反馈括号里的内容,当然加多个括号也是可以的。如下:

a=re.compile(r'([\w\W.]+?(@saicmotor\.com))',re.I)
a=re.compile(r'[\w\W.]+?@saicmotor\.com',re.I)

处理带方括号/中括号的方法:

s="EpmCrg_[1-23,32]"
p1 = re.findall('(?<=\\[).+(?=\\])', s) 
p2=re.findall(".+(?=\\[)",s)
print(p1[0])
print(p2[0])