gpt4 book ai didi

python - 可以重新忽略惰性量词吗?

转载 作者:行者123 更新时间:2023-12-01 23:45:09 25 4
gpt4 key购买 nike

给定这段代码(Python 3.6):

>>> import re
>>> a = re.search(r'\(.+?\)$', '(canary) (wharf)')
>>> a
<_sre.SRE_Match object; span=(0, 16), match='(canary) (wharf)'>
>>>

为什么 re 不在第一个括号闭包处停止搜索?

预期的输出是。搜索应该检测到 (canary) 之后没有行尾,但它没有。

编辑:如果括号之间只有一个单词,它应该匹配,如果有多个单词,则根本不匹配。

如有任何帮助,我们将不胜感激。

最佳答案

惰性标志不会被忽略。

您会在整个字符串上找到匹配项,因为 .+? 表示匹配任何内容一次或多次,直到找到匹配项为止,根据需要扩展。如果regex was \([^)]+?\)$它只会匹配最后一个 (wharf) 因为我们从匹配 )

中排除了 +?

或者如果正则表达式是 \(.+?\),它会匹配 (canary) (wharf),这表明它在偷懒。

\(.+?\)$ 匹配所有内容,因为您让它匹配所有内容,直到行尾。

如果你想确保整个字符串中括号中只有一组,我们可以使用上面的“no-parentheses-regex”来做到这一点,并强制字符串的开头与你的正则表达式的开头相匹配.

^\([^)]+?\)$
试试看:https://regex101.com/r/Ts9JeF/1

解释:

  • ^\(:匹配字符串开头的文字(
  • [^)]+?:匹配除 ) 之外的任何内容,根据需要多次匹配
  • \)$:匹配行尾的文字)$

或者,如果您想在括号中的单词前后允许其他单词,但不在括号中,请执行以下操作:

^[^()]*?\([^)]+?\)[^()]*$
试试看:https://regex101.com/r/Ts9JeF/3

解释:

  • ^[^()]*?:在字符串的开头,匹配除括号之外的任何内容零次或多次。
  • \([^)]+?\):非常类似于我们之前的正则表达式
  • [^()]*$:匹配零个或多个非括号字符,直到字符串结束。

关于python - 可以重新忽略惰性量词吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64307384/

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