Python 非贪婪正则表达式
我想知道如何写一个Python的正则表达式,比如 "(.*)"
,让它在给定字符串 "a (b) c (d) e"
时,能够匹配到 "b"
,而不是 "b) c (d"
。
我知道可以用 "[^)]"
来替代 "."
,但我希望找到一个更通用的解决方案,这样我的正则表达式看起来会更简洁。有没有办法告诉Python“嘿,尽快匹配这个”呢?
7 个回答
17
难道 \\(.*?\\)
不可以用吗?这是一个非贪婪的写法。
92
>>> x = "a (b) c (d) e"
>>> re.search(r"\(.*\)", x).group()
'(b) c (d)'
>>> re.search(r"\(.*?\)", x).group()
'(b)'
根据文档的说明:
在正则表达式中,'
*
'、'+
'和'?
'这些符号都是贪婪的,它们会尽量匹配尽可能多的文本。有时候,这种行为并不是我们想要的。例如,如果我们用正则表达式<.*>
去匹配字符串 '<H1>title</H1>
',它会匹配整个字符串,而不仅仅是 '<H1>
'。如果在这些符号后面加上 '?
',就会让它们以非贪婪的方式进行匹配,也就是说,它们会尽量少匹配字符。使用.*?
在之前的表达式中,就只会匹配到 '<H1>
'。
386