Python正则表达式--每日一点 compile filter findall

首先复习一下上次说的内容

import re


# 将匹配的数字乘以 2
def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)


s = 'M23G4HFR567'
print(re.sub('(?P<value>\d+)', double, s))

怎么理解上面的re.sub呢,其实这里面的三个参数是这样理解,在S中根据'(?P<value>\d+)'这个规则去匹配,每匹配成功一次,调用一次double这个函数,并把matched参数传过去,也就是匹配成功的返回值 result = re.match(……)就是这里的result, 然后通过group分组获取vaule的值,可以将这段代码复制下来运行一下

compile

有些地方我们经常遇到 re.compile(参数1, 参数2)这种写法,这个方法其实就是为了生成一个正则表达式的对象,这个函数里面包含两个参数

  • 1,参数表示一个字符串形式的正则表达式
  • 2:可选参数,辅助参数
    • re.I 忽略大小写
    • re.L 表示特殊字符集 \w \W \b \b \s \S
    • re.M 多行模式
    • re.S 表示包括换行符在内的任意字符 ( .不包括换行符)
    • re.U表示特殊字符集

使用说明

    # re.I 表示忽略大小写
    pattern = re.compile("([a-z]+) ([a-z]+)",re.S)
    m = pattern.match('jsd fk5343adsadasd33543')
    print(m.group())

以上也就是基本的介绍了

这里补充一点,其实match有一个使用方法之前还没有介绍

pattern.match("ajsdkjasdjksa", 3, 8) #表示的从其中某一段开始匹配

findall 使用

findall是在相关的字符串中进行查找,返回一个列表。如果没有匹配到任何一个字符串,则返回一个空的列表,match是匹配一次, findall是匹配所有。

    # re.S 表示包括换行符在内的所有字符
    pattern = re.compile("\d+", re.S)
    result = pattern.findall("abd12asnd5asd55ad44")
    print(result)
    # 打印结果: ['12', '5', '55', '44']

finditer

这个方法其实和findall很类似的一个方法,他匹配后将返回一个迭代器,需要用户去遍历

    result = re.finditer(r"\d+", "abd12235asnd5asd55ad44")
    for it in result:
        print(it.group())
    # 打印结果: 
    # '12',
    #  '5', 
    # '55', 
    # '44'

re.split的使用

    res = re.split('\W+', 'runoob, runoob, runoob.')
    print(res)
    # 打印结果
    # ['runoob', 'runoob', 'runoob', '']
    # 很奇怪为什么会显示这样结果呢,这么会有一个空的字符串呢

其实在这里我们可以想象一把菜刀在两个逗号和一个点号中间切一刀,这样出来的结果就会出来一个空的元素

  • 如果出现第三个参数则表示切割多少次,例如(‘\W+’, ‘runoob, runoob, runoob.’, 1),这里的1表示切割一次

  • 如果第四个参数存在则表示是否区分大小写,特殊字符等参数,和上面的参数功能一致

实例 描述
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。

这些常用的我们必须要掌握

猜你喜欢

转载自blog.csdn.net/jeekmary/article/details/81260940