给出以下代码(Python 3.6):
>>> import re
>>> a = re.search(r'\(.+?\)$', '(canary) (wharf)')
>>> a
<_sre.SRE_Match object; span=(0, 16), match='(canary) (wharf)'>
>>>
为什么在第一个感觉异常关闭时不停止搜索?
预期输出为None
。搜索应该检测到没有线的末端之后(canary)
,但事实并非如此。
编辑:如果在括号之间只有一个单词,则它应该匹配;如果有多个,则根本不匹配。
任何帮助将不胜感激。
惰性标志不会被忽略。
因为你对整个串的匹配.+?
方法相匹配任何直到找到一个匹配,一次或多次扩展需要。如果正则表达式是\([^)]+?\)$
仅匹配最后一个,(wharf)
因为我们+?
从匹配中排除了)
或者,如果正则表达式是\(.+?\)
,它会匹配(canary)
和的(wharf)
,这表明它的懒惰。
\(.+?\)$
匹配所有内容,因为您可以使其匹配所有内容,直到行尾为止。
如果要确保整个字符串中的括号中只有一组,可以使用上方的“ no-parentheses-regex”来执行此操作,并强制字符串的开头与您的regex的开头匹配。
^\([^)]+?\)$
试试看:https : //regex101.com/r/Ts9JeF/1
说明:
^\(
:(
在字符串开头匹配文字[^)]+?
:匹配,但)
根据需要匹配任意次\)$
:)$
在行尾匹配文字。或者,如果您想在括号中允许在其前后的其他单词,但括号中什么也不允许,请执行以下操作:
^[^()]*?\([^)]+?\)[^()]*$
试试看:https : //regex101.com/r/Ts9JeF/3
说明:
^[^()]*?
:在字符串的开头,匹配所有内容,但括号要零次或多次。\([^)]+?\)
:非常类似于我们以前的正则表达式[^()]*$
:匹配零个或多个非括号字符,直到字符串结尾。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句