Python正则表达式多行未找到任何内容

Python正则表达式多行未找到任何内容,python,regex,Python,Regex,我有一根像 line = "... ... constant0 username@domain\r" 我需要提取域名 matchObj = re.match( 'constant\d+\s+(\w+)\@(\w+)', line, re.M|re.I) matchObj总是返回None。这里缺少什么?使用re.search而不是re.match,re.match用于在字符串开头进行匹配 : Python提供了两种基于正则表达式的不同基本操作 表达式:re.match() 字符串,而re.se

我有一根像

line = "... ... constant0 username@domain\r"
我需要提取域名

matchObj = re.match( 'constant\d+\s+(\w+)\@(\w+)', line, re.M|re.I)

matchObj
总是返回
None
。这里缺少什么?

使用
re.search
而不是
re.match
re.match
用于在字符串开头进行匹配

:

Python提供了两种基于正则表达式的不同基本操作 表达式:
re.match()
字符串,而
re.search()
检查 字符串(这是Perl默认做的事情)

从以下文件:

请注意,即使在模式中,re.match()也只会在字符串的开头匹配,而不会在每行的开头匹配

如果要在字符串中的任何位置查找匹配项,请改用(另请参见)

re.match()。您将希望改用
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
>>重新导入
>>>line=“……constant0”username@domain\r“
>>>matchebj=re.match('constant\d+\s+(\w+)\@(\w+),行,re.M|re.I)
>>>matchObj#无
>>>matchebj=re.search('constant\d+\s+(\w+)\@(\w+),行,re.M|re.I)
>>>matchObj
>>>打印匹配对象组(0)
康斯坦特username@domain
>>>打印匹配对象组(1)
用户名

re.match
仅在字符串开头匹配<代码>重新搜索
匹配任何位置。根据,不要只在重新匹配的开头添加一个
*
,使用
re.search
获得优化!(
re.search
在c中进行快速循环,只检查字符串中与第一个字符匹配的部分。如果它以不明确的字符开头,则必须一直到字符串的结尾并回溯。)

并且是对Python的大部分正则表达式功能的一个更温和的(我认为)一般更好的介绍