Python正则式还可以精确指定匹配的次数。指定的方式是
如果你只想指定一个最少次数或只指定一个最多次数,你可以把另外一个参数空起来。比如你想指定最少3次,可以写成 {3,} (注意那个逗号),同样如果只想指定最大为5次,可以写成{,5},也可以写成{0,5}。
例 寻找下面字符串中
a:3位数
b: 2位数到4位数
c: 5位数以上的数
d: 4位数以下的数
>>> s= ‘ 1 22 333 4444 55555 666666 ‘ >>> re.findall( r’\b\d{3}\b’ , s ) # a:3位数 ['333'] >>> re.findall( r’\b\d{2,4}\b’ , s ) # b: 2位数到4位数 ['22', '333', '4444'] >>> re.findall( r’\b\d{5,}\b’, s ) # c: 5位数以上的数 ['55555', '666666'] >>> re.findall( r’\b\d{1,4}\b’ , s ) # 4位数以下的数 ['1', '22', '333', '4444']
‘*’ ‘+’ ‘?’通常都是尽可能多的匹配字符。有时候我们希望它尽可能少的匹配。比如一个c语言的注释 ‘/* part 1 */ /* part 2 */’,如果使用最大规则:
>>> s =r ‘/* part 1 */ code /* part 2 */’ >>> re.findall( r’/\*.*\*/’ , s ) [‘/* part 1 */ code /* part 2 */’]
结果把整个字符串都包括进去了。如果把规则改写成
>>> re.findall( r’/\*.*?\*/’ , s ) #在*后面加上?,表示尽可能少的匹配 ['/* part 1 */', '/* part 2 */']
结果正确的匹配出了注释里的内容