如何在Python中找到与正则表达式的所有匹配?

kja*_*keb 288 python regex search

在我正在编写的程序中,我使用Python re.search()函数在一个文本块中查找匹配项并打印结果.但是,程序一旦找到文本块中的第一个匹配就退出.

如果程序没有停止,直到找到所有匹配项,我该如何反复执行此操作?有没有单独的功能来做到这一点?

Amb*_*ber 493

使用re.findallre.finditer代替.

re.findall(pattern, string) 返回匹配字符串列表.

re.finditer(pattern, string)返回MatchObject对象上的迭代器.

例:

re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')
# Output: ['cats', 'dogs']

[x.group() for x in re.finditer( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')]
# Output: ['all cats are', 'all dogs are']
Run Code Online (Sandbox Code Playgroud)

  • 免责声明:那些只会发现**非重叠的**匹配 (20认同)
  • @Raksha - 在循环中使用`re.search`.它将返回一个`Match`对象.你需要将`Match.start()+ 1`作为`re`search`的`pos`参数传递给循环的下一次迭代. (15认同)
  • `finditer`就是我想要的.我很惊讶一个人返回Match对象和其他字符串.我期待使用`match_all`或`match_iter`函数. (9认同)
  • 如果匹配包含多个组,`findall` 将返回匹配元组列表,而不是匹配字符串列表。 (6认同)
  • @AntoineLizée,如何找到重叠的迭代? (3认同)
  • findall 对于命名组没有用。 (3认同)