Logo

贪婪/非贪婪匹配

Python 贪婪与非贪婪匹配详解及示例

概念

贪婪/非贪婪匹配

Python 贪婪与非贪婪匹配详解及示例

有时候你希望某个模式能够选择性地进行匹配!? 字符会将其前面的分组标记为模式中的可选部分。例如,在交互式环境中输入以下代码:

1import re 2 3Regex = re.compile(r'(scientific )?programming') 4m1 = Regex.search('Learn programming') 5m2 = Regex.search('Learn scientific programming') 6 7print(m1.group()) 8print(m2.group())

输出结果为:

1programming 2scientific programming

这意味着正则表达式中的 (scientific )? 部分表示 scientific (注意后面的空格!)是一个可选的分组。该正则表达式可以匹配不包含或只包含一次 scientific 的文本,因此它既能匹配 'programming',也能匹配 'scientific programming'。

需要注意的是,*、+ 和 ? 限定符默认都是贪婪的,它们会尽可能多地匹配文本。有时这种行为并不理想;例如,如果正则表达式 <.*> 被用于匹配字符串 '

Learn Scientific Programming

',它会匹配整个字符串,而不仅仅是 '

'。在限定符后面添加 ? 可以使其变为非贪婪模式(或最小匹配模式),即尽可能少地匹配字符。将上面的例子改为使用 .*? 后,就只会匹配到 '

'。

Python 正则表达式 - 向前查找和向后查找

Python 正则表达式示例详解