zoukankan      html  css  js  c++  java
  • 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', '']
  • 相关阅读:
    Eclipse下载
    Java为什么需要基本类型
    今日学到乱写
    图解HTTP——阅读笔记
    HashMap以及ConcurrentHashMap
    别个代码阅读学习(一)
    nodeJs配置相关以及JSON.parse
    数据库设计那些事儿
    数据库特训系列1——基础拾遗
    机器学习之词语识别——记录
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/10846845.html
Copyright © 2011-2022 走看看