贪婪模式:
贪婪模式会尽量匹配多的字符串,默认情况使用过的是贪婪模式,如下
1 2 3 4 |
import re text = "0123456789" ret = re.match("\d+",text) print(ret.group()) |

贪婪模式会把整个都会匹配下来
非贪婪模式:
正则表达式会尽量少的匹配字符。
1 2 3 4 |
import re text = "0123456789" ret = re.match("\d+?",text) print(ret.group()) |

通过加一个?来切换成非贪婪模式
例:
1 2 3 4 |
import re text = "<h1>title<h1>" ret = re.match("<.+>",text) print(ret.group()) |
如果只想取前面的<h1>的话就不能使用贪婪模式,贪婪模式会把整个字符串都匹配下来,效果如下:

因为它把第一个和最后一个作为一对括号
这时候可以使用非贪婪模式进行匹配就可以实现效果
1 |
ret = re.match("<.+?>",text) |

例:匹配0-100之间的数字
可以出现1,2,3,10等
不能出现09,101等
1 2 3 4 5 6 7 |
import re text = "100" ret = re.match("[1-9]\d?$|100$",text) #|分成两部分,前面匹配两位数表示开头只能是1-9的数字,然后 #个位可以是任意的数字,单必须是以这些数字结尾,这样就能拍出三位数 #100$就可以精确匹配100 print(ret.group()) |