为什么这个正则表达式只返回最后一个匹配?

时间:2017-09-17 21:31:47

标签: python regex

我不明白为什么这个正则表达式只返回最后一个匹配:

import re
text = """
Chicken chicken chicken chicken chicken chicken.

#=================
# @title   Chicken
# @author  Me
#=================
Chicken chicken chicken.
"""

rx = r"#=+\n(?:#\s*@(\w+)\s+(.*)\n)+#=+"
for match in re.finditer( rx, text ):
    print match.groups()

# Output:
# ('author', 'Me')

我希望这个正则表达式返回[ ('title', 'Chicken'), ('author', 'Me') ],但它似乎只返回最后一个匹配。如果我设置标志re.M(多行),并且标志re.DOTALL不是我打算在这里,那么这不会改变。

为清楚起见,您可以visualise the regex here,这似乎是我的意图,即:

  • 来自第一条评论专线#===...
  • 使用格式# @(word) (anything)
  • 查找并捕获下一行

0 个答案:

没有答案
相关问题