zoukankan      html  css  js  c++  java
  • python 正则表达式

    一、 正则表达式

     

    元字符

    d

    digit,数字(等效:[0-9])

    d+

    匹配连续的数字

    D

    非数字

    D{3}

    匹配连续的非数字

    w

    word,单词([A-Z0-9a-z_])

    w{6}

    6个单词字符

    W

    非单词(单词是指标识符)

    W{3}

    3个非单词字符

    s

    space,空白字符([ ])

    s{2}

    2个空白字符

    S

    非空白字符

    S{3}

    3个非空白字符

    通配

    .

    除开换行的任意字符

    .{3}

    3个任意字符(换行除外)

    量词

    ?

    有一个或没有(0、1)

    d?

    最多匹配一个数字

    *

    任意个数(0、1、2、3….)

    d*

    匹配任意个数的数字

    +

    至少一个(1、2、3、4…)

    [a-z]+

    匹配一个以上的字母

    数量

    {m}

    m个(x==m个)

    d{3}

    精确匹配3个数字

    {m,n}

    m到n个(m<=x<=n个)

    d{3,5}

    匹配3到5个数字

    {m,}

    至少m个(x>=m个)

    d{3,}

    匹配3个到以上的数字

    集合中任意一个

    [set]

    set可以是单个字符,也可以是范围

    [da-f]

    十六进制中单个字符

    不在集合中任意一个

    [^set]

    通上,set前有一个^,表示在所有字符中取set集合的补集

    [^3-6]

    3到6之外的字符

    简单分组

    ()

    括号用于将规则包起来,成为一组,不可拆分的规则不用括号包起来

    (.d+)

    .和紧接着的数字

    边界

    

    能组成标识符的字符和不能组成标识符的字符之间

    d+

    匹配非w字符紧接着多个数字

    |

    多组规则,任意一组满足

    d{3}|[a-z]{5}

    匹配3个数字或5个字母

    注意:匹配N个,只连续出现N次。

    二、 Python中使用正则表达式
    常用方法:
    方法 返回值类型 作用
      re.match(pattern, string, flags=0)   正则匹配对象、None   从头匹配
      re.search(pattern, string, flags=0)   正则匹配对象、None   匹配
      re.compile(pattern, flags=0)   正则模式对象、None   编译正则
      re.findall(pattern, string, flags=0)   列表   查找所有匹配
      re.sub(pattern, repl, string, count=0, flags=0)   字符串   字符串替换
      re.split(pattern, string, maxsplit=0, flags=0)   列表   字符串分割
      re.finditer(pattern, string, flags=0)   可迭代对象   获取多次匹配
    匹配模式(标志):
      re.I:Ignore Case,全称 re.IGNORECASE,忽略字母大小写。
    补充:
    正则匹配对象的方法中,groups()方法,可以得到匹配到的所有组,是元组类型。
      re.search()方法,只有匹配到一个以后,就不再继续查找了。
      re.compile()编译得到的结果是一个正则模式对象,可以调用查找、匹配等方法,但是不需要再传递模式(pattern)参数。
      re.findall()返回的数据与模式有关,如果模式中没有组,会返回所有找到的完整匹配,如果模式中有组,只会返回匹配到的组内容。无论是否匹配到了数据,都会返回一个列表。
      re.findall()返回值演示

    import re
    
    found1 = re.findall(r'd{2}D', 'addafd3434daf3434adf')
    print(found1)
    # ['34d', '34a']
    
    found2 = re.findall(r'(d{2})D', 'addafd3434daf3434adf')
    print(found2)
    # ['34', '34']
    
    found3 = re.findall(r'((d){2})D', 'addafd3434daf3434adf')
    print(found3)
    # [('34', '4'), ('34', '4')]

      re.finditer()返回一个可迭代对象,可迭代对象每一次迭代返回的的是一个正则匹配对象。不管能不能匹配到数据,都会返回一个可迭代对象。
      re.finditer()使用示例:
    # 示例一

    import re
    
    pattern = r'((d+).(d{2}))D'
    data = 'piis3.1415,rmb have 2.50,one apple need 3.25 yuan'
    it = re.finditer(pattern, data)
    for i in re.finditer(pattern, data):
        print(i, i.groups())

    # 示例二

    import re
    
    pattern = r'(d{2}).(1)2'
    data = '12.34dsafafad22.22,ad23.2323fd33.33,44.45'
    for i in re.finditer(pattern, data):
        print(i, '	', i.groups())

    其他示例代码:

    re.sub(r'灌水|水军|扯淡', '***', '一大批水军在这里扯淡、整天灌水。')
    re.sub(r'(d+)[a-z]+', r'(1)', 'he234He, Hh66aabbcc')
    
    import re
    
    data = 'pi is 3.1415, I have a DREAM, Learning Python'
    repl = '-*-'
    split_result = repl.join(re.split(r'[a-z]+', data))
    sub_result = re.sub(r'[a-z]+', repl, data)
    print(split_result)
    print(sub_result)
    print(split_result == sub_result)

  • 相关阅读:
    Hitachi Programming Contest 2020 E Odd Sum Rectangle
    CF1060F Shrinking Tree
    UR #19
    AGC041F Histogram Rooks
    JOISC2020 Legendary Dango Maker
    Dinic 二分图匹配 / Hopcroft-Karp 算法 复杂度简单证明
    Codechef March Challenge 2020 Division 1 BREAK
    Tomorrow will be fine.
    JOISC2019 穿越时空 Bitaro
    POI2011 Periodicity
  • 原文地址:https://www.cnblogs.com/sxqfuture/p/9982136.html
Copyright © 2011-2022 走看看