贪婪匹配

    最后需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的 0

    >>> re.match(r'^(\d+)(0*)$', '102300').groups()

    ('102300', '')

    由于 \d+ 采用贪婪匹配,直接把后面的 0 全部匹配了,结果 0* 只能匹配空字符串了。

    必须让 \d+ 采用非贪婪匹配(也就是尽可能少匹配),才能把后面的 0 匹配出来,加个 ? 就可以让 \d+ 采用非贪婪匹配:

    >>> re.match(r'^(\d+?)(0*)$', '102300').groups()

    ('1023', '00')