lawrence1357 发表于 2020-7-18 14:45:13

正则表达式

贪婪模式和非贪婪模式的匹配范围搞不清楚,比如下面的代码

        s = "This is a number 234-235-22-423"

        r = re.match("(.+)(\d+-\d+-\d+-\d+)", s)

        print(r.group(1))

        >>>        This is a number 23       

        r = re.match("(.+?)(\d+-\d+-\d+-\d+)", s)

        print(r.group(1))

        >>>        This is a number

贪婪模式的尽可能多匹配和非贪婪模式的尽可能少匹配怎么理解,谢谢
       

suchocolate 发表于 2020-7-18 23:20:38

{:10_243:}

陈尚涵 发表于 2020-7-19 18:04:11

什么贪婪非贪婪{:10_269:}{:10_269:}

suchocolate 发表于 2020-7-19 19:39:13

本帖最后由 suchocolate 于 2021-1-24 13:36 编辑

import re
st = 'fish is good, fishc.com is very good.'
print(re.match(r'fish(.*)good', st))
print(re.match(r'fish(.*?)good', st))

>>>
================ RESTART: C:/Users/admin/Desktop/testre.py ================
<_sre.SRE_Match object; span=(0, 36), match='fish is good, fishc.com is very good'>
<_sre.SRE_Match object; span=(0, 12), match='fish is good'>
>>>

Stubborn 发表于 2020-7-19 21:56:29

本帖最后由 Stubborn 于 2020-7-19 22:08 编辑

贪婪模式->多配呗,非贪婪就少配呗

"(.+)(\d+-\d+-\d+-\d+)"   在满足第二正则式,第一正则式会多配,配到4- 之前 ,在配,第二正则式就没有结果了

"(.+?)(\d+-\d+-\d+-\d+)"满足第二正则式,其余全部给第一正则式了。
页: [1]
查看完整版本: 正则表达式