python re库的贪婪匹配和最小匹配

举例:

import re
m=re.search(r'PY.*N','PYANBNCNDN')
m.group(0)

我们用re库中的search函数进行匹配,表示匹配以PY开头,以N结尾,中间可以有若干字符串的字符串。我们匹配的目标是字符串PYANBNCNDN
从这串字符串里我们可以看到其中包含多项匹配项,长度不一,有PYAN
;PYANBN;PYANBNCN;PYANBNCNDN;那我们究竟返回哪一个匹配呢?

贪婪匹配:

re库默认采用贪婪匹配,即输出匹配最长的字串;
所以如果不加任何标识,我们的search函数,将返回最长的那个字串

>>>import re
>>>m=re.search(r'PY.*N','PYANBNCNDN')
>>>m.group(0)
'PYANBNCNDN'

那么有时候我们需要匹配返回的不是那个最长的字串,而是最短的字串的时候,我们应该怎么操作。
我们应该修改search函数里面re.search(r’PY.N’,‘PYANBNCNDN’)改为re.search(r’PY.?N’,‘PYANBNCNDN’)

>>>import re
>>>m=re.search(r'PY.*?N','PYANBNCNDN')
>>>m.group(0)
'PYAN'

最小匹配在贪婪匹配的基础上进行了扩展,也就是说re库中,如果你想要得到最小匹配,你需要对操作符进行扩展。即:(常见的四种)

操作符 说明
*? 前一个字符0次或无限次扩展,最小匹配
+? 前一个字符1次或无限次扩展,最小匹配
?? 前一个字符0次或1次扩展,最小匹配
{m,n}? 扩展前一个字符m次到n次(包含n),最小匹配

其实当我们看到有操作符可以匹配不同长度的时候我们都可以在这个操作符后面增加一个?来获得最小匹配的结果

你可能感兴趣的:(python,python,正则表达式)