re.search()
在字符串中找到模式的第一次匹配,文档:
扫描字符串查找正则表达式模式产生匹配的位置,并返回相应的MatchObject实例。如果没有任何位置与模式匹配,则返回None;请注意,这与在字符串某个点处找到零长度匹配是不同的。
为了匹配每一个出现的位置,你需要使用re.findall()
,文档:
以字符串列表形式返回所有非重叠的模式匹配项。字符串从左到右进行扫描,并按照发现顺序返回匹配项。如果模式中存在一个或多个组,则返回一个组列表;如果模式有多个组,则这将是一个元组列表。空匹配包括在结果中,除非它们接触到另一个匹配的开头。
示例:
>>> import re
>>> regex = re.compile(r'([a-z]+)', re.I)
>>>
>>> regex.search("123hello456world789").groups()
('hello',)
>>>
>>> regex.findall("123hello456world789")
['hello', 'world']
更新:
由于您的重复问题(请参见此链接讨论),我也在这里添加了我的另一个答案:
>>> import re
>>> regex = re.compile(r'([a-z][a-z-\']+[a-z])')
>>> regex.findall("HELLO W-O-R-L-D") # this has uppercase
[] # there are no results here, because the string is uppercase
>>> regex.findall("HELLO W-O-R-L-D".lower()) # lets lowercase
['hello', 'w-o-r-l-d'] # now we have results
>>> regex.findall("123hello456world789")
['hello', 'world']
正如你所看到的,你之前提供的第一个样本失败的原因是因为它使用了大写字母,你可以简单地添加re.IGNORECASE
标志,尽管你提到匹配应该仅限于小写字母。
hello
和world
不相邻,但这是你的模式正在寻找的。 - Martijn Pietersre.search
来做这件事? - Steinar Lima