我需要找到给定正则表达式在字符串中的所有匹配项。我一直使用findall()
来做这件事情,直到遇到一个它无法按照我的预期工作的案例。例如:
regex = re.compile('(\d+,?)+')
s = 'There are 9,000,000 bicycles in Beijing.'
print re.search(regex, s).group(0)
> 9,000,000
print re.findall(regex, s)
> ['000']
在这种情况下,search()
返回我需要的内容(最长匹配),但findall()
表现不同,即使文档暗示应该相同:
findall()
匹配所有模式的出现,而不仅仅是像search()
那样只匹配第一个。
为什么行为不同?
如何通过
findall()
(或其他方式)实现与search()
相同的结果?
finditer
实际上更适合我正在做的事情。正则表达式来自用户输入,因此我无法控制它。 - armandino