可以重新忽略懒惰的量词吗?

鲁宾·加西亚(Ruben Garcia)导师

给出以下代码(Python 3.6):

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

为什么在第一个感觉异常关闭时不停止搜索?

预期输出为None搜索应该检测到没有线的末端之后(canary),但事实并非如此。

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

任何帮助将不胜感激。

普拉纳夫·霍桑加迪(Pranav Hosangadi)

惰性标志不会被忽略。

因为你对整个串的匹配.+?方法相匹配任何直到找到一个匹配,一次或多次扩展需要如果正则表达式是\([^)]+?\)$仅匹配最后一个,(wharf)因为我们+?从匹配中排除了)

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

\(.+?\)$匹配所有内容,因为您可以使其匹配所有内容,直到行尾为止。

如果要确保整个字符串中的括号中只有一组,可以使用上方的“ no-parentheses-regex”来执行此操作,并强制字符串的开头与您的regex的开头匹配。

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

说明:

  • ^\((在字符串开头匹配文字
  • [^)]+?:匹配,但)根据需要匹配任意
  • \)$)$在行尾匹配文字

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

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

说明:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章