• re 正则匹配的非贪婪匹配


    非贪婪匹配

    将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式。

    ?

    abc.*?

    abc.+?


    非贪婪匹配:尽可能少的匹配
    {n,}?
    {,n}?
    {n,m}?
    *? # *号表示 *号前面的字符出现0--无数个 ?号表示最少匹配
    +?   # +号表示 +号前面的字符出现1--无数个
    ?? # ??表示0--1个

    print(re.findall(r'ab{0,}', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
    print(re.findall(r'ab{0,}?', 'aababbabbb')) # ['a', 'a', 'a', 'a']

    print(re.findall(r'ab{,3}', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
    print(re.findall(r'ab{,3}?', 'aababbabbb')) # ['a', 'a', 'a', 'a']

    print(re.findall(r'ab{1,3}', 'aababbabbb')) # ['ab', 'abb', 'abbb']
    print(re.findall(r'ab{1,3}?', 'aababbabbb')) # ['ab', 'ab', 'ab']

    print(re.findall(r'ab*', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
    print(re.findall(r'ab*?', 'aababbabbb')) # ['a', 'a', 'a', 'a']

    print(re.findall(r'ab+', 'aababbabbb')) # ['ab', 'abb', 'abbb']
    print(re.findall(r'ab+?', 'aababbabbb')) # ['ab', 'ab', 'ab']

    print(re.findall(r'ab?', 'aababbabbb')) # ['a', 'ab', 'ab', 'ab']
    print(re.findall(r'ab??', 'aababbabbb')) # ['a', 'a', 'a', 'a']


    print(re.findall(r'', '')) # ['']
    print(re.findall(r'a{0}', 'a')) # ['', '']

    # 非贪婪匹配结合单个匹配结果是没有任何意义的
    print(re.findall(r'b*?', 'bbbbbbbb'))
    print(re.findall(r'(?:ab)*?', 'bbbbbbbb'))

    # 非贪婪匹配的应用场景,正则一定会有首尾标识,中间匹配的结果会有非贪婪匹配的语法
    s = '<a>abc</a><a></a>'
    print(re.findall(r'<.*>', s)) # ['<a>abc</a><a></a>']
    print(re.findall(r'<.*?>', s)) # ['<a>', '</a>', '<a>', '</a>']

    print(re.findall(r'<a>(.*)</a>', s)) # ['abc</a><a>']
    print(re.findall(r'<a>(.*?)</a>', s)) # ['abc', '']
  • 相关阅读:
    Spring AOP 随记
    Java设计模式系列 — 构造器模式
    【Java线程安全】 — 常用数据结构及原理(未完结)
    【最佳实践】好用的Quartz管理器类
    Timer和时间调度
    Java9之HashMap与ConcurrentHashMap
    记一次maven的包冲突经历
    hbase高可用集群部署(cdh)
    HBase 1.2.6 完全分布式集群安装部署详细过程
    hadoop-2.7.3完全分布式部署
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/10846845.html
Copyright © 2020-2023  润新知