gpt4 book ai didi

python - 为什么最小(非贪婪)匹配会受到字符串结尾字符 '$' 的影响?

转载 作者:太空狗 更新时间:2023-10-29 21:27:22 24 4
gpt4 key购买 nike

编辑:删除原始示例,因为它引发了辅助答案。还固定了标题。

问题是为什么正则表达式中“$”的存在会影响表达式的贪婪度:

这是一个更简单的例子:

>>> 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 (最右边的那个)?

最佳答案

匹配由 "left-most, then longest" “排序” ;然而,“最长”是在允许非贪婪之前使用的术语,而是表示类似于“每个原子的首选重复次数”。最左边比重复次数更重要。因此,“a+?$”将不会匹配“baaaaa”中的最后一个 A,因为第一个 A 的匹配在字符串中较早开始。

(在评论中的 OP 澄清后答案发生了变化。查看以前文本的历史记录。)

关于python - 为什么最小(非贪婪)匹配会受到字符串结尾字符 '$' 的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com