• 【python学习第11节笔记:正则表达式,python中使用正则表达式】


    一,正则表达式

    什么是正则表达式:正则表达式又称规则表达式。用来匹配,检索,替换符合某个规则的文本。表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个”规则字符串“,这个”规则字符串“用来表达对字符串的一种过滤逻辑。

    1.1元字符

    1.1.1元字符(1)

    . 匹配单个字符,如 r.t匹配 rat,rot 等
    * 匹配任意多个字符
    + 匹配一个或多个在它之前的那个字符,如:r+t 匹配 rt ,rrt 等
    \ 转意字符将元字符当作普通字符

    1.1.1元字符(2)

    ? 只能匹配0或1个在他之前的字符,如: r?t ,只匹配 t 或者 rt
    | 两个匹配条件进行逻辑‘’或‘’运算,如: \(him\|her\) 匹配 him 或者 her
    $ 匹配行结束符,如: boy$ 匹配以boy位行结尾的字符串
    ^ 匹配一行的开始,如: ^boy 匹配以boy为行首的字符串

    1.1.1元字符(3)

    [ ] 匹配括号中的任意一个字符,如:r[aou]t 匹配 rot, rat, rut
    [c1-c2] 括号中可以使用连字符-来指定,如:[0-5],匹配 0 1 2 3 4 5
    [^c1-c2] 匹配除了指定区间外的补集,如:[^257a-c]匹配除了2 5 7 a b c以外的任何一个字符

    1.1.1元字符(4)

    \< 和 \> 匹配词(word)的开始和结束,如:\匹配 them 不匹配 other
    \( \) 将两个之间的表达式定义为一个‘“组”,并且将这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到 \9的符号来引用。如:%s/\(99\)/\1aa/g 将99替换成99aa

    1.1.1元字符(5)

    \{ i \} 和 \{i , j \} 匹配指定数目的字符,如:a[1-6]\{2\}能够匹配到a后面跟着的正好2个字符的a13, a24, a54等不会匹配到 a123

    二,python中使用正则表达式

    python通过使用re模块,获得全部正则表达式的功能

    2.1re.match

    对字符串进行完整的匹配(从0开始匹配)

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

    pattern:  匹配的正则表达式
    string:   要匹配的字符串
    flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
    示例1:

    import re
    print(re.match('www','www2 213 sad')) #在起始位置匹配
    print(re.match('www','2 213 swwwad')) #不在起始位置匹配
    
    #执行结果
    <_sre.SRE_Match object; span=(0, 3), match='www'>
    None
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    示例2:
    . 代表任意一个字符
    * 是前面一个字符的任意重复
    re.I 表示忽略大小写
    r 表示原始字符串(不用转义)

    print("\ne")
    print(r"\ne")
    #执行结果
    
    e
    \ne
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    直接输出matchobj.group()会输出匹配到的整句话,matchobj.group(1)会输出匹配到的第一组
    matchobj.group(2)会输出匹配到的第一组。

    import re
    line = "Page is a pig"
    matchobj = re.match(r'(.*) is a (.*)',line,re.I)
    print(matchobj.group())
    print(matchobj.group(1))
    print(matchobj.group(2))
    
    
    #执行结果
    Page is a pig
    Page
    pig
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.2re.search

    扫描整个字符串并返回第一个成功的匹配

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

    pattern:  匹配的正则表达式
    string:   要匹配的字符串
    flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
    示例:

    import re
    print(re.search('www','2 213 swwwad'))
    print(re.search('www','2 213 swwwad').group()) #匹配不上返回空
    
    #执行结果
    <_sre.SRE_Match object; span=(7, 10), match='www'>
    www
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.3re.sub

    用于替换字符串中的匹配项

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

    pattern:  匹配的正则表达式
    repl:  替换的字符串,也可以为一个函数
    string:   要被查找替换的字符串
    count:  模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
    flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
    示例1:传入的是一个字符串
    #.*$ 的意思是以#开头任意字符结尾
    \D 的意思是非数字的字符串

    import re
    phone = "0086-10-12345678 #这是一个国内北京的电话号码"
    
    #删除后面的注释
    num = re.sub(r'#.*$',"",phone)
    print(num)
    
    #删除非数字的字符串
    num = re.sub(r'\D',"",phone)
    print(num)
    
    #执行结果
    0086-10-12345678 
    00861012345678
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    示例2:传入的是一个函数
    (?P…):这部分是正则表达式中的命名捕获组语法。它允许给一个子模式(…)指定一个名称,这里的名称是’value’。通过这个名称,可以在匹配结果中引用到这个具体的子模式。

    \d+:这是一个子模式,用于匹配一个或多个数字字符。\d表示匹配任意一个数字字符(0-9),而+表示匹配前面的模式一次或多次。

    import re
    def double(matched):
        value = int(matched.group('value'))
        return str(value*2)
    
    s = '321+123=444'
    print(re.sub('(?P\d+)',double,s))
    
    #执行结果
    642+246=888
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4 正则表达式修饰符

    1,re.I : 忽略大小写匹配
    2.,re.M : 多行匹配。使 ^ 和 $ 可以匹配每一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。
    3.re.S : 单行匹配。使 . 可以匹配包括换行符在内的任意字符
    4,re.X: 冗长模式。允许使用空白字符和注释来增加正则表达式的可读性。

  • 相关阅读:
    4款黑科技软件,其中三款功能过于强大,被误认为是外国佬开发的
    HDU 2612 - Find a way(两遍广搜)
    java实现命令模式
    【pen200-lab】10.11.1.146
    城市三维地理信息可视化 技术解析
    QT静态成员函数访问和操作UI对象
    从零开始学习 Java:简单易懂的入门指南之网络编程(三十七)
    less方案实现主题切换 window.less.modifyVars
    负载均衡式在线OJ判题系统
    Spring循环依赖
  • 原文地址:https://blog.csdn.net/qq_44764044/article/details/133323716