• re模块


    常用正则表达式符号

    '.'     默认匹配除 之外的任意一个字符,若指定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'}

    最常用的匹配语法

    re.match 从头开始匹配

    re.search 匹配包含
    re.findall 把所有匹配到的字符放到以列表中的元素返回
    re.splitall 以匹配到的字符当做列表分隔符
    re.sub      匹配字符并替换

    1)"."匹配除 以外的任一字符

    1 >>> import re
    2 >>> a = re.match(".","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    3 >>> print(a)
    4 <_sre.SRE_Match object; span=(0, 1), match='I'>

    2)"+"匹配前一个字符1次或多次,若是匹配不上会报错

    1 >>> a = re.match(".+","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    2 >>> a
    3 <_sre.SRE_Match object; span=(0, 44), match='IPv4 地址 . . . . . . . . . . . . :
    4 >>> a.group()
    5 'IPv4 地址 . . . . . . . . . . . . : 10.0.0.120'

    没有匹配上

    1 >>> a = re.match("w+","!IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    2 >>> a.group()
    3 Traceback (most recent call last):
    4   File "<stdin>", line 1, in <module>
    5 AttributeError: 'NoneType' object has no attribute 'group'

    3)"*"匹配前一个字符0次或者多次,意思是匹配不到也不会出错了

    1 >>> a = re.match("w*","!IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    2 >>> a.group()
    3 ''

    4)"?"匹配前一个字符0次或1次,意思是匹配不到也不会出错了

    “w”匹配[a-zA-Z0-9]

    1 >>> a = re.match("w?","!IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    2 >>> a.group()
    3 ''
    4 >>> a = re.match("w?","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    5 >>> a.group()
    6 'I'

    5)"{m}"匹配前一个字符m次

    1 >>> a = re.match("w{3}","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    2 >>> a.group()
    3 'IPv'

    6)“{n,m}”匹配前一个字符n到m次

    1 >>> a = re.match(".{3,6}","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    2 >>> a.group()
    3 'IPv4 地'

    7)"|"其中一个匹配任意1个

     1 >>> a = re.match("ipv4|IPv4","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
     2 >>> a
     3 <_sre.SRE_Match object; span=(0, 4), match='IPv4'>
     4 
     5 没有匹配到的情况
     6 >>> a = re.match("ipv4|IPV4","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
     7 >>> a
     8 
     9 有多个能匹配
    10 >>> a = re.match("ipv4|IPv4","ipv4IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
    11 >>> a
    12 <_sre.SRE_Match object; span=(0, 4), match='ipv4'>

    8)"(...)"分组匹配

    1 >>> b = re.search("(abc){2}a(123|456)c", "abcabca456c").group()
    2 >>> b
    3 'abcabca456c'

    9)“A”,只从字符开头匹配,同"^"

    1 >>> b = re.search("A", "123abcabca456c").group()
    2 >>> b
    3  ''
    4 >>> b = re.search("^", "123abcabca456c").group()
    5 >>> b
    6 6 ''
    7 >>> b = re.search("^", "abcabca456c").group()
    8 >>> b
    9 ''

     10)""匹配字符结尾,同“$”

    "d"匹配数字0-9

    1 >>> b = re.search("^d.*d", "350425199904100000 name:Hiha")
    2 >>> b
    3 
    4 >>> b = re.search("^d.*d", "350425199904100000 name:Hiha123")
    5 >>> b
    6 <_sre.SRE_Match object; span=(0, 31), match='350425199904100000 name:Hiha123'>

     11)“d”匹配数字0-9

    >>> b = re.search("d", "350425199904100000 name:Hiha123")
    >>> b
    <_sre.SRE_Match object; span=(0, 1), match='3'>

    12)"D"匹配非数字

    1 >>> b = re.search("D", "350425199904100000 name:Hiha123")
    2 >>> b
    3 <_sre.SRE_Match object; span=(18, 19), match=' '>

    13)"s"匹配空白字符、 、 、

    1 >>> b = re.search("s+","ab	c1
    3").group()
    2 >>> b
    3 '	'

    14)"(?P<name>...)"分组匹配

    1 >>> c = re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")
    2 >>> c
    3 {'province': '3714', 'birthday': '1993', 'city': '81'}
    匹配方法:

    re.sub 匹配字符并替换

    1 >>> d = re.sub("d+","|","abc1def2ghij3klmn")
    2 >>> d
    3 'abc|def|ghij|klmn'

    re.findall把所有匹配到的条件放到以列表中的元素返回

    1 >>> d = re.findall("d+","abc192.168.4.236def2ghij3klmn")
    2 >>> d
    3 ['192', '168', '4', '236', '2', '3']

    re.match从头开始匹配

    re.search匹配包含

    1 >>> d = re.search("d+","abc192.168.4.236def2ghij3klmn")
    2 >>> d
    3 <_sre.SRE_Match object; span=(3, 6), match='192'>

    re.split 把匹配到的字符当做分隔符

    1 >>> d = re.split("d+","abc192.168.4.236def2ghij3klmn")
    2 >>> d
    3 ['abc', '.', '.', '.', 'def', 'ghij', 'klmn']
  • 相关阅读:
    【转】编译原理4种文法类型
    Gamma校正与线性空间
    【翻译】CEDEC2014 CAPCOM 照相机正确的照片真实的制作工作流
    【翻译】CEDEC2013 BANDAI NAMCO 了解游戏格斗动画中的身体运动结构和原理
    UnrealEngine4 PBR Shading Model 概述
    【翻译】Kinect v2程序设计(C++-) AudioBeam篇
    【翻译】Kinect Studio是? 三月 SDK Update的新机能
    【翻译】Kinect v2程序设计(C++) Body 篇
    【翻译】Kinect v2程序设计(C++) BodyIndex篇
    【翻译】Kinect v2程序设计(C++) Depth编
  • 原文地址:https://www.cnblogs.com/wengxq/p/6964885.html
Copyright © 2020-2023  润新知