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

    python正则表达式

    1.常见表示符:

    • 字符表示:
    字符 功能
    . 匹配任意1个字符(除了 )
    [ ] 匹配[ ]中列举的字符
    d 匹配数字,即0-9
    D 匹配非数字,即不是数字
    s 匹配空白,即 空格,tab键
    S 匹配非空白
    w 匹配单词字符,即a-z、A-Z、0-9、_
    W 匹配非单词字符
    • 数量表示:
    字符 功能
    * 匹配前一个字符出现0次或者无限次,即可有可无
    + 匹配前一个字符出现1次或者无限次,即至少有1次
    ? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有; 在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪
    {m} 匹配前一个字符出现m次
    {m,} 匹配前一个字符至少出现m次
    {m,n} 匹配前一个字符出现从m到n次
    • 表示边界:
    字符 功能
    ^ 匹配字符串开头
    $ 匹配字符串结尾
     匹配一个单词的边界
    B 匹配非单词边界

    2.常见方法:

    • re.match('xxx',str):
      能够匹配出以xxx开头的字符串
    
    >>> import re
    
    # 匹配以12开头的字符串,如果匹配成功,返回一个对象,匹配失败则返回None。
    
    >>> print(re.match('12','123456'))  
    <_sre.SRE_Match object; span=(0, 2), match='12'>
    
    >>> print(re.match('12','0123456') )
    None
    
    # re.match返回的对象拥有group()方法,返回匹配到的字符串
    
    >>> re.match('1.?','123456').group()
    12
    
    
    • .group()返回匹配到的字符串。
    • .groups()返回匹配分组时匹配到的字符串的元组。
    • .group(0)等同于.group()
    • .group(1)等同于.groups()[0]
    • .group(n)等同于.groups()[n-1]

    • re.search('xxx',str):
      re.match只能够匹配出以xxx开头的字符串,search可以全文中匹配出xxx字符串。
    >>> re.search('1.?','ss123456').group()
    12
    
    >>> re.match('1.?','ss123456').group()
    AttributeError
    
    

    • re.findall('xxx',str):
      匹配出字符串中所有的匹配项,不过返回值不是一个正则对象,而是一个列表。
    >>> re.findall('1.?','jiao1awo15guan16ren')
    ['1a', '15', '16']
    
    

    • re.split('xxx',str):
      分给字符串,不过分割符是正则表达式。
    >>> re.split('1.?','jiao1awo15guan16ren')
    ['jiao', 'wo', 'guan', 'ren']
    

    • re.sub('xxx','yyy',str):
      将所有被xxx匹配到的字符串都替换成yyy(可以给匹配到的内容命名,替换时再重用)
    >>>  re.sub('1.?',' T-T ','jiao1awo15guan16ren')
    'jiao T-T wo T-T guan T-T ren'
    
    >>>  re.sub(r'{{(?P<name1>w*?)}}', 'g<name1>', '{{wol}} > 1')
    'wol > 1'
        
    

    3.匹配分组:

    字符 功能
    | 匹配左右任意一个表达式
    (ab) 将括号中字符作为一个分组
    umber 引用分组num匹配到的字符串
    (?P) 分组起别名
    (?P=name) 引用别名为name分组匹配到的字符串
    # 匹配1~100.
    >>> re.match("[1-9]?d$|100","100")
    
    # 匹配是否符合html标签
    >>> re.match(r"<(w*)><(w*)>.*</2></1>", "<html><h1>www.itcast.cn</h1></html>")
    
    # 匹配是否符合html标签:方法er
    >>> ret = re.match(r"<(?P<name1>w*)><(?P<name2>w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
    
    >>> ret.group()
    '<html><h1>www.itcast.cn</h1></html>'
    
    >>> ret.groups()
    ('html', 'h1')
    

  • 相关阅读:
    [ZJOI2011]营救皮卡丘
    TJOI2018Party
    HEOI2013SAO
    [BJOI2017]树的难题
    [HNOI2016]序列
    [SHOI2007]善意的投票
    CF802C Heidi and Library (hard)
    SPOJ DIVCNT2
    LOJ子序列
    BZOJ2882工艺
  • 原文地址:https://www.cnblogs.com/PrettyTom/p/12559153.html
Copyright © 2011-2022 走看看