我有一个字符串
line = "... ... constant0 username@domain\r"
我需要提取域
matchObj = re.match( 'constant\d+\s+(\w+)\@(\w+)', line, re.M|re.I)
matchObj
总是回来None
。我在这里缺少什么?
从上的文档re.match
:
请注意,即使在MULTILINE模式下, re.match() 也只会匹配字符串的开头,而不是每行的开头。
如果您想在字符串中的任何位置找到匹配项,请改用search()(另请参阅search() 与 match())。
re.match()
不会在字符串中的任何位置找到匹配项,而re.search()
会。你会想要使用re.search()
(大部分时间)来代替。
观察:
>>> import re
>>> line = "... ... constant0 username@domain\r"
>>> matchObj = re.match( 'constant\d+\s+(\w+)\@(\w+)', line, re.M|re.I)
>>> matchObj # None
>>> matchObj = re.search('constant\d+\s+(\w+)\@(\w+)', line, re.M|re.I)
>>> matchObj
<_sre.SRE_Match object at 0x10ce84470>
>>> print matchObj.group(0)
constant0 username@domain
>>> print matchObj.group(1)
username
使用re.search
not re.match
,re.match
用于匹配字符串的开头。
Python 基于正则表达式提供了两种不同的原始操作:
re.match()
仅在字符串的开头检查匹配,而在字符串中的任何位置re.search()
检查匹配(这是 Perl 默认所做的)。