• 正则表达式之match,search,findall, sub及扩展符号


    正则表达式功能强大,但学习起来比较费事,今天来探讨一下match,search,findall, sub匹配规则

    1.match 只匹配开头的部分并且只匹配一次,否则返回为None

    匹配全部:

    import re
    
    reg = r'w+@(w+).com'
    pat = re.match(reg,'hello@qq.com hello@qq.com')
    print(pat.group(1))

    >>>qq

    匹配分组里面的

    import re
    
    reg = r'w+@(w+).com'
    pat = re.match(reg,'hello@qq.com hello@qq.com')
    print(pat.group())

    >>>hello@qq.com

    非开头模式则不匹配:匹配模式从@开始,而内容从hello开始的则匹配不上

    import re
    
    reg = r'@(w+).com'
    pat = re.match(reg,'hello@qq.com hello@qq.com')
    print(pat)

    >>>None

    2.search和match差不多,只匹配一次,但不限于开头

    非从头匹配,支持分组匹配

    import re
    
    reg = r'@(w+).com'
    pat = re.search(reg,'hello@qq.com hello@qq.com')
    print(pat.group(1))

    >>>qq

    3.findall 匹配一切可以匹配的支持分组匹配,没有group属性,返回是一个列表,但是有括号的只匹配括号里面的。

    只匹配括号内容

    import re
    
    reg = r'w+@(w+).com'
    pat = re.findall(reg,'hello@qq.com hello@qq.com')
    print(pat)

    >>>['qq', 'qq']

    匹配全部,不加括号 

    import re
    
    reg = r'w+@w+.com'
    pat = re.findall(reg,'hello@qq.com hello@qq.com')
    print(pat)

    >>>['hello@qq.com', 'hello@qq.com']

    4.sub用于替换所有匹配的信息,subn加上的次数

    import re
    
    reg = 'hello' #匹配对象
    sub = 'welcome to'#替换对象
    pat = re.sub(reg, sub,'hello world, hello  C')
    print(pat)

    >>>welcome to world, welcome to C
    import re
    
    reg = 'hello'
    sub = 'welcome to'
    pat = re.subn(reg, sub,'hello world, hello  C, hello java')
    print(pat)

    >>>('welcome to world, welcome to C, welcome to java', 3)#返回的是一个元组,最后加次数

    5.扩展符号(?i), (?m), (?s)的用法

    (?i) = re.I/IGNORECASE (?M) = re.M/MULTILINE (?s) = re.S/DOTALL

    是啥意思来,就是忽略大小写模式,多行匹配模式,能够使之匹配换行符,增强.+号的功力。此外i m s 可以混合使用。

    (?i) = re.I/IGNORECASE  忽略大小写

    import re
    
    reg = r'ming'
    pat = re.findall(reg,'Hello ming, Ming, MING?', re.I)
    print(pat)

    >>>['ming', 'Ming', 'MING']

    import re
    
    reg = r'(?i)ming'
    pat = re.findall(reg,'Hello ming, Ming, MING?')
    print(pat)

    >>>['ming', 'Ming', 'MING']

     (?M) = re.M/MULTILINE 匹配换行

    import re
    
    reg = r'(?im)ming'
    s = '''Hello ming
            Hello Ming
            Hello MING
    '''
    pat = re.findall(reg,s)
    print(pat)

    >>>['ming', 'Ming', 'MING']

    (?s) = re.S/DOTALL 匹配所有

    import re
    
    reg = r'(?ims).+'
    s = '''Hello ming
            Hello Ming
            Hello MING
    '''
    pat = re.findall(reg,s)
    print(pat)

    >>>['Hello ming Hello Ming Hello MING ']
  • 相关阅读:
    决策树
    训练/测试
    机器学习 标准差
    pandas01
    提交参数说明
    pandas_series02
    Yarn 模式
    词云图
    软件需求与分析课堂综合测试
    课堂测试10
  • 原文地址:https://www.cnblogs.com/Zhu-Xueming/p/8423842.html
Copyright © 2020-2023  润新知