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_]’。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Python中的re模块来筛选AABB式的词语。下面是一个示例代码: ```python import re text = "This is an AABB example sentence. I have another sentence with AABB words in it." pattern = r'\b([a-zA-Z])\1([a-zA-Z])\2\b' aabb_words = re.findall(pattern, text) print(aabb_words) ``` 在这个示例代码中,我们使用了正则表达式的\b表示单词边界,([a-zA-Z])\1表示匹配两个相同的字母,([a-zA-Z])\2表示匹配另外两个相同的字母,然后用\b表示单词边界来结束整个匹配。最后使用re.findall()函数获取所有匹配的结果。 输出结果为: ```python [('A', 'A'), ('A', 'B'), ('B', 'B'), ('A', 'A'), ('A', 'B'), ('B', 's')] ``` 这个结果表示在文本中匹配到了6个AABB式的词语。 ### 回答2: 要使用Python筛选AABB式的词语,可以使用正则表达式来匹配符合该模式的词语。 首先,需要 import re 模块来使用正则表达式函数。然后,可以使用 re.compile() 函数来编译正则表达式。针对AABB式的词语,可以使用如下的正则表达式模式:r'(\w)\1(\w)\2' 接下来,可以定义一个函数,将待筛选的词语作为参数传入。在函数内部,可以使用 re.findall() 函数来找到所有与正则表达式模式匹配的词语,并将其返回。 下面是一个示例代码,演示了如何使用正则表达式筛选AABB式的词语: ```python import re def filter_words(words): pattern = re.compile(r'(\w)\1(\w)\2') matched_words = re.findall(pattern, words) return matched_words words = "兔兔猫猫狗狗鸟鸟" result = filter_words(words) print(result) # 输出 ['兔兔猫猫', '狗狗鸟鸟'] ``` 以上代码中,待筛选的词语为"兔兔猫猫狗狗鸟鸟",使用 filter_words() 函数来筛选,并将结果打印输出。结果为 ['兔兔猫猫', '狗狗鸟鸟'],符合AABB式的词语。 希望这个回答对您有帮助! ### 回答3: 在Python中,可以使用正则表达式来筛选出满足AABB式的词语。 首先,我们需要导入Python中的re模块,它提供了正则表达式的支持。 接下来,我们可以定义一个正则表达式模式,用来匹配满足AABB式的词语。模式可以使用括号来分组匹配。 例如,我们可以使用以下正则表达式模式来筛选AABB式的词语: pattern = r'(\w)\1(\w)\2' 在上述正则表达式中,\w表示匹配任意字母或数字字符,\1表示匹配第一个分组,\2表示匹配第二个分组。 然后,我们可以通过使用re模块的findall()函数来找到所有匹配的词语。该函数接受两个参数:正则表达式模式和待匹配的字符串。它会返回一个包含所有匹配项的列表。 例如,我们可以使用以下代码来找到满足AABB式的词语: import re text = "ABAB CCDD AAEE AABB" pattern = r'(\w)\1(\w)\2' result = re.findall(pattern, text) 最后,我们可以打印出找到的匹配项: for word in result: print(word) 运行以上代码,输出结果为: ('A', 'B') ('C', 'D') ('A', 'A') ('A', 'B') 这些就是使用Python中的正则表达式筛选AABB式的词语的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值