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