zoukankan      html  css  js  c++  java
  • Python正则

    # !/user/bin/python
    # -*- coding: utf-8 -*-
    
    import re
    # match, 从头开始匹配
    a = re.match("192", "inet 地址:192.168.12.44")  # 不匹配, 因为字符串开头不是192.
    b = re.match("inet", "inet 地址:192.168.12.44")  # 返回<_sre.SRE_Match object; span=(0, 4), match='inet'>
    print(a)
    print(b)
    print(b.group())  # 返回所有匹配的值.
    
    # 点代表除了
      之外的任意字符
    c = re.match(".+", "inet 地址:192.168.12.44")
    print(c)
    
    
    # /w需要至少匹配一次
    d = re.match("/w?", "inet 地址:192.168.12.44")
    print(d)
    
    
    # ?代表匹配一次或零次
    d = re.match("/w?", "inet 地址:192.168.12.44")
    print(d)
    
    # search 搜索; groups可对字符串中的字符分组
    e = re.search("(abc){2}a(123|456)c", "abcabca456c")
    print(e.group())  # 返回abcabca456c
    print(e.groups())  # 返回('abc', '456')
    
    f = re.search("(dd)(dd)(d){2}(d){4}", "370218198709279908")
    print(f.groups())  # (dd) 的形式会把匹配的字符都连起来写; (d){4}的形式会把最后一个字符单个写出来.
                       # 返回('37', '02', '8', '7').
    h = re.search("(d{2})(d{2})(d{2})(d{4})(d{4})", "370218198709279908")
    print(h.groups())  # 返回('37', '02', '18', '1987', '0927'). 把字符串分组
    
    
    # A 只从字符开头进行匹配
    i = re.search("Aa", "abcabca456c")
    print(i.group())  # 返回a
    
    
    # ^ 以指定字符/数字开头, 和A的作用一样
    g = re.search("^37", "370218198709279908")
    print(g.group())  # 返回37
    
    
    # # groupdict 以字典的形式返回匹配的字符串
    # k = re.search("(?P<province>[0,9]{4})(?P<city>[0,9]{2})(?P<birthday>[0,9]{4})", "370218198709279908")
    # print(k.groupdict())  # TODO 为什么返回AttributeError: 'NoneType' object has no attribute 'groupdict',演示是在Xshell5环境
    
    
    # # 搜索IP地址
    # m = re.search("d{1,3).d{1,3}.d{1,3}.d{1,3}", "inet 地址:192.168.12.44") # TODO 为什么报错. 演示是在Xshell5环境
    # print(m)
    # n = re.search("(d{1,3).){3}", "inet 地址:192.168.12.44")
    # print(n)
    
    
    # findall
    o = re.findall("d+","abcdfewage25435r3")
    print(o)  #返回['25435', '3']
    
    p = re.findall("[a-zA-Z]+]", "abjvldAFEWdfh2894AJlfd89AHvhk")
    print(p)
    
    q = re.findall("D+]", "abjvldAFEWdfh2894AJlfd89AHvhk")
    print(q)
    
    
    # sub 替换
    r = re.sub("d+","|","abjvldAFEWdfh2894AJlfd89AHvhk" )  # 将数字替换成|
    print(r)  # 返回 abjvldAFEWdfh|AJlfd|AHvhk
    
    
    # split 拆分
    s = re.split("\\", r'c:userdatapython35')
    print(s)  # 返回 ['c:', 'user', 'data', 'python35']

    常用正则表达式符号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    '.'     默认匹配除 之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a"," abc eee",flags=re.MULTILINE)
    '$'     匹配字符结尾,或e.search("foo$","bfoo sdfsf",flags=re.MULTILINE).group()也可以
    '*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb''ab''a']
    '+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab''abb']
    '?'     匹配前一个字符1次或0
    '{m}'   匹配前一个字符m次
    '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb''ab''abb']
    '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
    '(...)' 分组匹配,re.search("(abc){2}a(123|456)c""abcabca456c").group() 结果 abcabca456c
     
     
    'A'    只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的
    ''    匹配字符结尾,同$
    'd'    匹配数字0-9
    'D'    匹配非数字
    'w'    匹配[A-Za-z0-9]
    'W'    匹配非[A-Za-z0-9]
    's'     匹配空白字符、 、 、 , re.search("s+","ab c1 3").group() 结果 ' '
     
    '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province''3714''city''81''birthday''1993'}

      

    最常用的匹配语法

    1
    2
    3
    4
    5
    re.match 从头开始匹配
    re.search 匹配包含
    re.findall 把所有匹配到的字符放到以列表中的元素返回
    re.splitall 以匹配到的字符当做列表分隔符
    re.sub      匹配字符并替换

    反斜杠的困扰
    与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。同样,匹配一个数字的"\d"可以写成r"d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

    仅需轻轻知道的几个匹配模式

    1
    2
    3
    re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
    M(MULTILINE): 多行模式,改变'^''$'的行为(参见上图)
    S(DOTALL): 点任意匹配模式,改变'.'的行为

      

  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/cheese320/p/9061551.html
Copyright © 2011-2022 走看看