【发布时间】:2011-05-03 23:44:12
【问题描述】:
编辑:删除原始示例,因为它引发了辅助答案。还修正了标题。
问题是为什么正则表达式中的“$”会影响表达式的贪心:
这是一个更简单的例子:
>>> import re
>>> str = "baaaaaaaa"
>>> m = re.search(r"a+$", str)
>>> m.group()
'aaaaaaaa'
>>> m = re.search(r"a+?$", str)
>>> m.group()
'aaaaaaaa'
“?”似乎什么都不做。请注意,当“$”被删除时,“?”受到尊重:
>>> m = re.search(r"a+?", str)
>>> m.group()
'a'
编辑: 换句话说,"a+?$" 匹配所有的 a 而不仅仅是最后一个,这不是我所期望的。这是正则表达式“+?”的描述来自python docs: “添加'?'在限定符使其以非贪婪或最小方式执行匹配之后;将匹配尽可能少的字符。"
在这个例子中似乎不是这样:字符串“a”匹配正则表达式“a+?$”,那么为什么字符串“baaaaaaa”上的相同正则表达式匹配不只是一个a (最右边的)?
【问题讨论】:
-
您介意澄清一下您的问题吗?我无法准确理解您想要什么。 “第一场比赛”是什么意思?你在说
.+吗? -
用另一个库(在路径的上下文中)可能有更好的方法来做到这一点,但这基本上是一个关于正则表达式的问题。
-
我所说的第一个匹配是第一个search(),我会编辑。
-
@krumpelstiltskin 好的,那么。我在下面的回答中说了这一点,但这是因为您将所有内容都放在了括号中,所以所有内容都放在了组中。括号外没有任何内容可以匹配字符串的其余部分。
-
@arussell84 我添加了第二个示例,使问题更加清晰。您在下面的回答没有解决问题。
标签: python regex non-greedy