• 常用模块——re模块


    re模块

    正则表示式

    由堆具有特殊意义的字符组成的式子。用于匹配查找字符串内容。

    主要学习重点,就是学习这些字符的含义。

    匹配字符的特殊字符

    精准匹配

    "abc"表达式不包含任何特殊字符,就是精准匹配,说白了判断是否相同

    print(re.findall('abc','abcbbb'))
    #['abc']

     

    单个字符 匹配

    f

    位置匹配

    符号 含义
    A 从字符的开始处开始匹配
     从字符的结尾处匹配
    ^ 从字符的开始处开始匹配
    $ 从字符的结尾处匹配

     

     

     

     

    ^$为整体匹配

    print(re.match('^abc','abccc'))
    #<re.Match object; span=(0, 3), match='abc'>
    print(re.match('Aabc','abccc'))
    #<re.Match object; span=(0, 3), match='abc'>
    #结尾  $
    print(re.findall('abc$','dfabc'))
    print(re.findall('abc','sjjfabc'))
    #['abc']
    #['abc']

     

     范围匹配

    判断字符是否在一个范围内

    符号 含义
    w 字母 数字 下划线
    W 非字母 数字 下划线
    d 数字
    D 非数字
    s 空白字符
    S 非空字符
    [] 手动指定范围 ascii码表范围
    [^] 指定范围以外的内容 与上面相反
    . 除了换行符之外的任何字符

     

     

     

     

     

     

     

     

    重复匹配

    字符 含义
    * 任意次数
    + 一次或多次
    0次或1次

     

     

     

     

    *+都是贪婪匹配,会尝试尽可能多取

    给上述表达式加上?变成了非贪婪模式,尽可能的少取,最常用

    print(re.findall('w+','ndfjbsasb'))
    print(re.findall('w+?','ndfjbsasb'))
    #['ndfjbsasb']
    #['n', 'd', 'f', 'j', 'b', 's', 'a', 's', 'b']

     

    分组

    给表达式中需要单独获取的部分加上括号

    ‘src="(http.*?)"’

    一个表达式中可以有多个分组

    用search或match得到match对象调用group传入的索引来获取分组内容

    text = '<a class="toolsite" href="http://12306.360.cn/?src=daohang_2" title="抢火车票">抢火车票</a>'
    print(re.findall('(http.*?)"',text))
    #['http://12306.360.cn/?src=daohang_2']

     

    注意

    如果匹配的内容包括 得变成4个斜杠或者r'\'

    text = r'a'#匹配a
    print(re.findall('a\\b',text))
    print(re.findall(r'a\b',text))
    #['a\b']
    #['a\b']

     

    re模块的常用的方法

    text = 'daaaccddddasd'

     

    re.findall()

    检索所有内容,在列表中显示所有符合条件的字符串

    res = re.findall('a+',text)
    print(res)
    #['aaa', 'a']

     

    re.match()

    从开头检索内容,若开头内容符合条件,则返回第一个条件的match对象,否则返回None

    res = re.match('d',text)
    print(res)
    print(res.group())
    #<re.Match object; span=(0, 1), match='d'>
    #d

     

    re.search()

    检索所有内容,内容第一符合条件,则返回第一个符合条件的match对象,否则返回None

    match对象可以通过.group()

    res = re.search('a+',text)
    print(res)
    print(res.group())
    #<re.Match object; span=(1, 4), match='aaa'>
    #aaa

     

    re.complie()

    将传入的字符串表达式,转变成一个正则对象,可以适应各种re操作。

    pa = re.compile('a+')
    print(re.findall(pa,text))
    #['aaa', 'a']

     

    re.sqlit()

    将字符串根据条件切分,成字典形式

    res = re.split('a+',text)
    print(res)
    #['d', 'ccdddd', 'sd']

    re.sub()

    将字符串根据条件替换,返回新的字符串

    text = 'daaaccddddasd'
    res = re.sub('a+','A',text)
    print(res)
    #dAccddddAsd
  • 相关阅读:
    codeforces 732E(贪心)
    codeforces 732D(二分)
    codeforces 731C(DFS)
    codeforces 651C(map、去重)
    codeforces 723D(DFS)
    codeforces 721C (拓排 + DP)
    2018 Multi-University Training Contest 3
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    The 2018 ACM-ICPC Chinese Collegiate Programming Contest
  • 原文地址:https://www.cnblogs.com/msj513/p/9818386.html
Copyright © 2020-2023  润新知