re模块:findall()

findall():查询字符串中某个正则表达式模式全部的非重复出现情况。

一、正常匹配

  正则表达式不支持子组匹配

import re
s = 'This and that.'
p = re.compile(r'th\w+', re.I)  # 不区分大小写
print p.findall(s)
======================================
['This', 'that']
======================================

findall( ) 函数类似于 search( ) 函数,但与 match( ) 和 search( ) 的不同之处在于,findall( )总是返回一个列表
如果 findall( ) 没有找到匹配部分,就返回一个空列表,但如果匹配成功,列表将包含所有成功的匹配部分。

二、存在子组

  正则表达式支持子组匹配

import re
s = 'This and that.'
p = re.compile(r'(th\w+)', re.I)  # 不区分大小写
print "r'(th\w+)' result:", p.findall(s)

p = re.compile(r'(th(\w+))', re.I)
print "r'(th(\w+))' result:", p.findall(s)

p = re.compile(r'th(\w+)', re.I)
print "r'th(\w+)' result:".ljust(20), p.findall(s)
======================================
r'(th\w+)' result:   ['This', 'that']
r'(th(\w+))' result: [('This', 'is'), ('that', 'at')]
r'th(\w+)' result:   ['is', 'at']
======================================
1、r'(th\w+)'r'th\w+'

findall( )匹配到多个结果,并以字符串列表的形式返回;
正则表达式r'(th\w+)'中多存在一个子组匹配,但结果与r'th\w+'相同;
当表达式中存在子组时,匹配结果只返回子组匹配的结果;
当存在一个子组时,结果会以字符串列表的形式返回;

2、r'(th\w+)'r'(th(\w+))'

正则表达式r'(th(\w+))'中多存在一个子组匹配;
当存在多个子组时,结果会以元组列表的形式返回,每个元组保存多个子组匹配结果;

3、r'th(\w+)'r'th\w+'

当表达式中存在子组时,匹配结果只返回子组匹配的结果;
当存在一个子组时,结果会以字符串列表的形式返回;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: re模块中的findall函数用于在字符串中查找所有匹配正则表达式的子串,并返回一个列表。例如: ``` import re text = "The cat is white and the dog is black." result = re.findall(r'\b[a-z]{3}\b', text) print(result) ``` 输出为: ``` ['The', 'cat', 'is', 'and', 'the', 'dog', 'is'] ``` 上面的例子中,findall在字符串text中查找了所有由3个小写字母组成的单词。 ### 回答2: 在 Python 中,re 模块(正则表达式模块)的函数 findall() 是用来在字符串中查找符合某个正则表达式的所有子串,并将它们以列表的形式返回。 使用 findall() 函数的步骤如下: 首先导入 re 模块: ``` import re ``` 然后定义正则表达式,例如要查找所有以数字开头的字符串: ``` pattern = r"\d\w*" ``` 其中 r 表示将字符串视为 raw string(原始字符串),即不对反斜杠等进行转义。 下一步就是调用 findall() 函数: ``` string = "hello 123 world" result = re.findall(pattern, string) print(result) ``` 这段程序将输出符合正则表达式的子串列表: ``` ['123', 'world'] ``` 如果要查找多个子串,只需要在正则表达式中使用括号表示分组,例如要查找所有以数字开头的单词和它们后面的标点符号: ``` pattern = r"(\d\w*)(\W*)" string = "hello 123 world!" result = re.findall(pattern, string) print(result) ``` 这段程序将输出一个包含元组的列表: ``` [('123', ' '), ('world', '!')] ``` 其中每个元组表示一个符合正则表达式的子串,第一个元素是第一个括号中的子串,第二个元素是第二个括号中的子串。 总之,使用 Python 中的 re 模块findall() 函数可以方便地在字符串中查找符合某个正则表达式的所有子串,从而快速处理文本数据。 ### 回答3: Python中re模块对于正则表达式的处理提供了非常有力的支持。findall是re模块的一个函数,用于在字符串中查找所有符合正则表达式的子字符串,它会返回一个字符串列表,其中包含了所有符合条件的子字符串。 findall的基本使用格式为: re.findall(pattern, string, flags=0) 其中,第一个参数pattern是正则表达式,第二个参数string是要在其中查找的字符串,第三个参数flags则是用于re模块的标志设置。 findall函数会在string中匹配符合pattern的所有子字符串,并将它们存储在一个列表中返回。如果pattern中存在子组,则findall函数在返回的列表中将只保留子组对应的子字符串。如果pattern中不存在子组,则返回的列表中将仅包含整个匹配的子字符串。 需要注意的是,findall函数不会返回匹配对象,而是直接返回找到的字符串。如果需要使用匹配对象,可以使用finditer函数。 另外,需要特别注意的是,如果正则表达式中有括号,则findall函数只会返回括号里的内容,而不是整个匹配的字符串。如果需要返回整个匹配的字符串,可以在正则表达式中使用非捕获括号“(?:...)”。 findall函数在许多场景中都非常有用和实用,比如提取字符串中的数字、链接、邮箱地址等信息。掌握好这个函数的使用方法,可以让我们更加高效地处理和利用文本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值