当前位置:嗨网首页>书籍在线阅读

14-贪心和非贪心匹配

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.4 贪心和非贪心匹配

在字符串 'HaHaHaHaHa' 中, (Ha){3,5} 可以匹配3个、4个或5个实例,但若用 (Ha){3,5} 去查找 'HaHaHaHaHa' 时,你会发现 Match 对象的 group() 调用只会返回 'HaHaHaHaHa' ,而不是更短的可能结果。毕竟 'HaHaHa''HaHaHaHa' 也能够有效地匹配正则表达式 (Ha){3,5}

Python的正则表达式默认是“贪心”的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的“非贪心”(也称为“惰性”)版本尽可能匹配最短的字符串,即在结束的花括号后跟着一个问号。

在交互式环境中输入以下代码,在查找相同字符串时,注意花括号的贪心形式和非贪心形式之间的区别:

>>> greedyHaRegex = re.compile(r'(Ha){3,5}')
>>> mo1 = greedyHaRegex.search('HaHaHaHaHa')
>>> mo1.group()
'HaHaHaHaHa'
>>> nongreedyHaRegex = re.compile(r'(Ha){3,5}?')
>>> mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
>>> mo2.group()
'HaHaHa'

请注意,问号在正则表达式中可能有两种含义:声明非贪心匹配或表示可选的分组。这两种含义是完全无关的。