Answers:
>>> x = "a (b) c (d) e"
>>> re.search(r"\(.*\)", x).group()
'(b) c (d)'
>>> re.search(r"\(.*?\)", x).group()
'(b)'
根据文档:
“
*
”,“+
”和“?
”限定词都是贪婪的;它们匹配尽可能多的文本。有时这种行为是不希望的;如果RE<.*>
与'<H1>title</H1>
' 匹配,它将匹配整个字符串,而不仅仅是'<H1>
'。?
在限定符之后添加' ',以使其以非贪婪或最小的方式进行匹配;尽可能少的字符将被匹配。使用.*?
在前面的表达式将只匹配“<H1>
”。
首先,我不建议在正则表达式中使用“ *”。是的,我知道,它是最常用的多字符定界符,但它不是一个好主意。这是因为,尽管它确实匹配该字符的任何重复量,但“ any”仍包含0,这通常是您要为其抛出语法错误而不是接受的东西。相反,我建议使用+
与长度> 1的任何重复匹配的符号。此外,从我所看到的来看,您正在处理定长括号括起来的表达式。结果,您可能可以使用{x, y}
语法来专门指定所需的长度。
但是,如果您确实需要非贪婪的重复,我建议您咨询无所不能的?
。将其放置在任何正则表达式重复说明符的末尾时,将强制正则表达式的该部分查找尽可能少的文本。
话虽这么说,但我会非常小心?
,就像Who博士中的Sonic螺丝起子有这样做的倾向,如果不仔细校准,我应该如何将它“稍微”变坏。例如,要使用示例输入,它将识别((1)
(注意缺少第二个rparen)作为匹配项。