2.7 最短匹配模式

问题

不想使用贪婪模式

解决方案

在正则表达式中*操作符是贪婪的,因此匹配操作会查找最长的可能匹配。

为了修正这个问题,可以在模式中的*操作符后面加上?修饰符:

>>> text2 = 'Computer says "no." Phone says "yes."'
>>> str_pat = re.compile(r'\"(.*?)\"')
>>> str_pat.findall(text2)
['no.', 'yes.']

讨论

通过在 * 或者 + 这样的操作符后面添加一个 ? 可以强制匹配算法改成寻找最短的可能匹配。

Last updated

Was this helpful?