zoukankan      html  css  js  c++  java
  • python 正则表达式 RE模块汇总记录

    1. re.compile(pattern, flags=0)
    2. re.search(pattern, string, flags=0)
    3. re.match(pattern, string, flags=0)
    4. re.fullmatch(pattern, string, flags=0)
    5. re.split(pattern, string, maxsplit=0, flags=0)
    6. re.findall(pattern, string, flags=0)
    7. re.finditer(pattern, string, flags=0)
    8. re.sub(pattern, repl, string, count=0, flags=0)
    9. re.subn(pattern, repl, string, count=0, flags=0)
    10. re.escape(string)
    11. re.purge()

    1.re.compile(pattern, flags=0) 

      把一个表达式字符串转化成为一个RegexObject

      pattern:正则表达式字符,如'd'

      flags:匹配模式,可以使用按位或'|'表示同时生效

      匹配模式有

    1. re.A/re.ASCII:仅执行8位的ASCII码字符匹配

    2. re.DEBUG:查看正则表达式的匹配过程

    3. re.I/re.IGNORECASE:忽略大小写

    4. re.L/re.LOCALE:使预定字符类 w W  B s S 取决于当前区域设定

    5. re.M/re.MULTILINE:多行匹配。当指定时,模式字符' ^'匹配字符串的开头以及每个行的开头(紧接每个换行符); 模式字符'$'匹配字符串的末尾以及每一行的结尾(紧靠每个换行符之前)。默认情况下, '^'只匹配字符串的开始,'$'只匹配字符串的末尾和字符串末尾换行符(如果有的话)之前的位置。

    6. re.S/re.DOTALL:使.匹配包括换行在内的所有字符

    7. re.X/re.VERBOSE:允许在正则表达式规则中加入注释,但默认会去掉所有空格。

    8. re.U(UNICODE): 使预定字符类 w W  B s S d D 取决于unicode定义的字符属性

       例子:

    1 a = re.compile(r"""d +  # the integral part
    2                     .    # the decimal point
    3                     d *  # some fractional digits""", re.X)
    4 4 b = re.compile(r"d+.d*")

          以上a等价于b

    1 import re
    2 s="123abc45AB"
    3 reg=re.compile('a',re.I)
    4 reg.findall(s)

      输出:

      ['a','A']

     2.re.search(pattern, string, flags=0)

      pattern:正则表达式模式字符串,如'd'

      string:要匹配的字符串

      flags:匹配模式,可以使用按位或'|'表示同时生效

      将字符串的所有字符尝试与正则表达式匹配,如果匹配成功,返回matchobject,否则返回None.若有多个匹配成功,只返回第一个匹配结果。matchobject有多个属性和方法。

     1 import re
     2 m= re.search(r'(d+)w(d+)', 'ab12c34d56')
     3 print("m.string:", m.string)
     4 print("m.re:", m.re)
     5 print("m.pos:", m.pos)
     6 print("m.endpos:", m.endpos)
     7 print("m.lastindex:", m.lastindex)
     8 print("m.lastgroup:", m.lastgroup)
     9 print("m.group(1,2):", m.group(1, 2))
    10 print("m.groups():", m.groups())
    11 print("m.groupdict():", m.groupdict())
    12 print("m.start(2):", m.start(2))
    13 print("m.end(2):", m.end(2))
    14 print("m.span(2):", m.span(2))
    15 print("m.expand(r'\2\1'):", m.expand(r'2 1'))
    16 #
    17 #m.string: ab12c34d56
    18 #m.re: re.compile('(\d+)\w(\d+)')
    19 #m.pos: 0                   #代表RE开始搜索字符串的位置。
    20 #m.endpos: 10               #代表RE搜索字符串的结束位置。
    21 #m.lastindex: 2             #最后一次匹配到的组的数字序号,如果没有匹配到,将得到None
    22 #m.lastgroup: None          #最后一次匹配到的组的名字,如果没有匹配到或者最后的组没有名字,将得到None。 
    23 #m.group(1,2): ('12', '34') #返回一个或多个子组,如果不传任何参数,效果和传入一个0一样,将返回整个匹配。
    24 #m.groups(): ('12', '34')  #返回一个由所有匹配到的子串组成的元组。
    25 #m.groupdict(): {}     #返回一个包含所有命名组的名字和子串的字典
    26 #m.start(2): 5       #返回被组group匹配到的子串在原字符串中的开始位置。如果不指定group或group指定为0,则代表整个匹配。如果group未匹配到,则返回 -1。
    27 #m.end(2): 7         #返回被组group匹配到的子串在原字符串中的后一个位置
    28 #m.span(2): (5, 7)   #返回一个元组: (m.start(group), m.end(group))
    29 #m.expand(r'21'): 34 12

    3.re.match(pattern, string, flags=0)

       参数同re.search

      在字符串开头匹配,其他re.search一致。不同的是如果匹配的字符不在字符串开头,re.search可以寻到,re.match不可以。

    4.re.fullmatch(pattern, string, flags=0)

      如果模式完全匹配字符串,则返回一个matchobject,不匹配则返回None

     1 import re
     2 m1=re.fullmatch(r'd',"3")
     3 print('m1.group():', m1.group())
     4 print('m1.groups():', m1)
     5 #
     6 #m1.group(): 3
     7 #m1.groups(): <_sre.SRE_Match object; span=(0, 1), match='3'>
     8 
     9 m1=re.fullmatch(r'd',"3d")
    10 print('m1.groups():', m1)
    11 #
    12 #m1.groups(): None

    5.re.split(pattern, string, maxsplit=0, flags=0)

      maxsplit:分割次数

      其他参数同上

      通过正则表达式将字符串分割,匹配到符合的字符就把字符串分割一次,maxsplit没有赋值,找到几个匹配项就分割几次,若maxsplit赋值小于匹配项个数,则分割maxsplit次。返回一个list。

    1 import re
    2 print("re.split('d','ab12c4d56d'):",re.split('d','ab12c4d56d'))
    3 print("re.split('d','ab12c4d56d'):",re.split('d','ab12c4d56d',3))
    4 print("re.split('d','ab12c4d56d'):",re.split('d','ab12c4d56d',2))
    5 #
    6 #re.split('d','ab12c4d56d'): ['ab', '', 'c', 'd', '', 'd']
    7 #re.split('d','ab12c4d56d'): ['ab', '', 'c', 'd56d']      
    8 #re.split('d','ab12c4d56d'): ['ab', '', 'c4d56d']  

    6.re.findall(pattern, string, flags=0)

    7.re.finditer(pattern, string, flags=0)

      查找整个字符串,返回所有的匹配项。参数与re.search一致。

      re.search和re.match只会返回一个匹配项,而re.findall和re.finditer返回所有匹配项。

      re.findall返回一个列表,包含所有匹配项。

      re.finditer返回一个迭代器。

     1 import re
     2 m1= re.findall(r'd+', 'ab12c12d56e7')
     3 print("m1:", m1)
     4 
     5 m2= re.finditer(r'd+', 'ab12c12d56e7')
     6 print("m2:", m2)
     7 
     8 #
     9 #m1: ['12', '12', '56', '7']
    10 #m2: <callable_iterator object at 0x000000000112EE80>

     

    8.re.sub(pattern, repl, string, count=0, flags=0)

    9.re.subn(pattern, repl, string, count=0, flags=0)

      pattern:表示需要匹配的正则表达式模式字符,匹配到的字符将会被替换

      repl:表示替换的字符串,可以是字符串,也可以是函数

      string:要被处理的字符串

      count:替换次数

      把string中所有符合pattern的字符串,替换成repl,count如赋值小于匹配项个数,则把前count个匹配项替换掉,其他字符不变。

      re.sub返回完成替换之后的字符串。

      re.subn返回元组,(完成替换之后的字符串,替换次数)。

      (特殊情况:如果匹配不到,则返回原字符串)

      

     1 import re
     2 s1=re.sub(r'd','w','qqq12q3',1)
     3 print("s1:", s1)
     4 s2=re.subn(r'd','w','qqq12q3',1)
     5 print("s2:", s2)
     6 #
     7 #s1: qqqw2q3
     8 #s2: ('qqqw2q3', 1)
     9 
    10 s1=re.sub(r'd','w','qqq12q3')
    11 print("s1:", s1)
    12 s2=re.subn(r'd','w','qqq12q3')
    13 print("s2:", s2)
    14 #
    15 #s1: qqqwwqw
    16 #s2: ('qqqwwqw', 3)
    17 #---------sub利用函数替换----------
    18 s3=re.sub('d',lambda m:'-'+m.group(0)+'-','sd1w2ed3e4') #在数字前后加上'-'
    19 
    20 print('s3=',s3)
    21 #
    22 #s3='sd-1-w-2-ed-3-e-4-'

     10.re.escape(string)

       对string字符串中的除了字母数字以外所有字符进行转义,都加上反斜杆。

    1 import re
    2 s=re.escape('a1.*@')
    3 print("s:", s)
    4 #
    5 #s: a1.*@

    11.re.purge()

       清空缓存中的正则表达式

    (此图源自网络,不记得原出处,若侵权,请联系,必马上删除)

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/congyinew/p/6491268.html
Copyright © 2011-2022 走看看