• python模块--re模块


    常用的正则表达式模式:

    .  匹配除换行符以外的任意字符
    d  匹配一个数字字符。等价于 [0-9]。
    D  匹配一个非数字字符。等价于 [^0-9]。
    s  匹配任何空白字符,包括空格、制表符、换页符等。等价于 [ f v]。
    S  匹配任何非空白字符。等价于 [^ f v]。
    w  匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
    W  匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
      字符的开始或结束。w{6} 匹配刚好6个字符的单词
    ^  匹配字符串开头
    $  匹配字符串的结束
    [^]   取反,匹配不在[]之中的字符, 例如 [^xyz] 匹配除了x,y,z以外的字符
    []  [xyz],字符x或者y或者z
     匹配0个或1个
    *  匹配0个或多个
    +  匹配1个或多个
       {}  {m}重复m次,{m,}重复m到多次,{m,n}重复m到n次
    ()  分组
    (?P<name>exp)    将exp匹配到的文本命名为name

     更多详细使用可参考:https://www.jb51.net/tools/zhengze.html

    re.match   匹配字符串的开始,如果不符合则返回None

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

    >>> re.match('[a-z]','1aaa')     # 没匹配到返回None
    >>> re.match('[a-z]','a1aaa')
    <_sre.SRE_Match object; span=(0, 1), match='a'>
    >>> re.match('[a-z]','a1aaa').group()   #group()匹配到的字符串
    'a'
    >>> re.match('[a-z]','a1aaa').span()
    (0, 1)

    re.search  匹配整个字符串,直到找到一个匹配

    >>> re.search('[a-z]','1aaa')
    <_sre.SRE_Match object; span=(1, 2), match='a'>

    findall  匹配所有符合正则的字符串,以列表形式返回

    >>> re.findall('[a-z]','ab11cd22ef33')   #匹配所有符合正则的字符串,并返回列表
    ['a', 'b', 'c', 'd', 'e', 'f']
    >>> re.findall('[a-z]','123456')    #没有匹配到则返回空列表
    []
    >>> pat = re.compile(r'd+')
    >>> pat.findall('aa 12 bb34 de')
    ['12', '34']
    >>> pat.findall('aa 12 bb34 de56')
    ['12', '34', '56']
    >>> 
    >>> pat.findall('aa 12 bb34 de56',0,5)   
    ['12']

    finditer   类似findall 将结果作为一个迭代器返回

    >>> pattern = re.compile(r'D+')
    >>> i = pattern.finditer('ab-11cd22ef33')
    >>> i
    <callable_iterator object at 0x7f8fc4d38908>
    >>> for x in i:
    ...      print(x)
    ... 
    <_sre.SRE_Match object; span=(0, 3), match='ab-'>
    <_sre.SRE_Match object; span=(5, 7), match='cd'>
    <_sre.SRE_Match object; span=(9, 11), match='ef'>

    compile 函数     编译正则表达式。

    re.compile(pattern[, flags])

    flags:匹配模式 re.I 忽略大小写  re.M 多行模式等

    >>> pattern = re.compile(r'D+')    # 先对正则进行编译,然后再匹配
    >>> pattern.search('ab-11cd22ef33').group()
    'ab-'
    >>> pattern.search('ab-11cd22ef33',0,2).group()
    'ab'
    >>> 
    >>> pattern.search('ab-11cd22ef33').start()
    0
    >>> pattern.search('ab-11cd22ef33').end()
    3
    >>> pattern.search('ab-11cd22ef33').span()
    (0, 3)

    split   按照正则匹配的子串将字符串分割并返回列表

    >>> re.split(r'*','a*b*c')
    ['a', 'b', 'c']

    re.sub    查找替换

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

    >>> re.sub(r'[^a-z]','*','ab11cd22ef33')
    'ab**cd**ef**'
    >>> re.sub('D','*','ab11cd22ef33')
    '**11**22**33'

    (?P<name>exp)

    >>> m = re.search('(?P<year>[0-9]{4})','this is 2018 yeara')
    >>> m.group('year')
    '2018'
    
    >>> m = re.search('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})','test 2012/12 year haha')
    >>> m.group()
    '2018/08'
    >>> m.group('year')
    '2018'
    >>> m.group('month')
    '08'
  • 相关阅读:
    beautiful number 数位DP codeforces 55D
    最长上升子序列
    0-1背包 codeforces 55 D
    概率DP HDU 4586 play the dice
    水题 不要62 HDU 2089
    抓老鼠 codeForce 148D
    ZOJ 3551 吸血鬼 概率DP
    poj 2151 Check the difficulty of problems 概率DP
    HDU 4681 string 求最长公共子序列的简单DP+暴力枚举
    HDU 1814 模板题 2-sat
  • 原文地址:https://www.cnblogs.com/xiaobaozi-95/p/9791728.html
Copyright © 2020-2023  润新知