编程论坛

 找回密码
 立即注册
广告联系qq1031180668广告位
查看: 87|回复: 1

[python] 正则表达式贪婪模式与非贪婪模式

[复制链接]
  • ta_mind

    2018-8-17 21:57
  • classn_01: 71 classn_02

    [LV.6]常住居民II

    983

    主题

    1704

    帖子

    3353

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3353

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2018-7-27 20:03:09 | 显示全部楼层 |阅读模式
    贪婪模式与非贪婪模式
    • 贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 ( * );
    • 非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配 ( ? );
    • Python里数量词默认是贪婪的。
    示例一 : 源字符串:abbbc
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    import re
    str="abbbc"
    pattern1=re.compile(r"ab*") #贪婪模式
    pattern2=re.compile(r"ab*?")#非贪婪模式
    print(pattern1.search(str))
    print(pattern2.search(str))
    

    • 使用贪婪的数量词的正则表达式 ab* ,匹配结果: abbb。
      * 决定了尽可能多匹配 b,所以a后面所有的 b 都出现了。

    • 使用非贪婪的数量词的正则表达式ab*?,匹配结果: a。
      即使前面有 *,但是 ? 决定了尽可能少匹配 b,所以没有 b。

    示例二 : 源字符串:aa<div>test1</div>bb<div>test2</div>cc
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    import re
    str="aa<div>test1</div>bb<div>test2</div>cc"
    pattern1=re.compile(r"<div>.*</div>")#贪婪模式
    pattern2=re.compile(r"<div>.*?</div>")#非贪婪模式
    print(pattern1.search(str))
    print(pattern2.search(str))



    • 使用贪婪的数量词的正则表达式:<div>.*</div>
    • 匹配结果:<div>test1</div>bb<div>test2</div>

    这里采用的是贪婪模式。在匹配到第一个“</div>”时已经可以使整个表达式匹配成功,但是由于采用的是贪婪模式,所以仍然要向右尝试匹配,查看是否还有更长的可以成功匹配的子串。匹配到第二个“</div>”后,向右再没有可以成功匹配的子串,匹配结束,匹配结果为“<div>test1</div>bb<div>test2</div>”

    • 使用非贪婪的数量词的正则表达式:<div>.*?</div>
    • 匹配结果:<div>test1</div>

    正则表达式二采用的是非贪婪模式,在匹配到第一个“</div>”时使整个表达式匹配成功,由于采用的是非贪婪模式,所以结束匹配,不再向右尝试,匹配结果为“<div>test1</div>”。

    不积跬步,无以至千里

    classn_11

    0

    主题

    42

    帖子

    88

    积分

    注册会员

    Rank: 2

    积分
    88
    发表于 2018-8-13 14:36:37 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|Archiver|小黑屋|sitemap|编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

    GMT+8, 2018-10-21 00:46 , Processed in 1.112680 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表