【问题标题】:How can I find all matches to a regular expression in Python?如何在 Python 中找到与正则表达式的所有匹配项?
【发布时间】:2011-06-09 12:46:46
【问题描述】:

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

在找到所有匹配项之前程序不会停止的情况下,我该如何重复执行此操作?是否有单独的函数来执行此操作?

【问题讨论】:

标签: python regex search


【解决方案1】:

请改用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']

【讨论】:

  • finditer 是我想要的。我很惊讶一个返回 Match 对象和其他字符串。我期待使用match_allmatch_iter 函数。
  • 免责声明:那些只会找到非重叠匹配项
  • @AntoineLizée,如何找到重叠的迭代?
  • @Raksha - 在循环中使用re.search。它将返回一个 Match 对象。您需要将Match.start() + 1 作为pos 参数传递给re.search,以进行下一次循环迭代。
  • 如果匹配包含多个组,findall 将返回匹配元组列表,而不是匹配字符串列表。
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2014-07-02
相关资源
最近更新 更多