Python findall()函数:查找符合正则表达式的字符串

本文详细介绍了Python中的re模块函数findall(),用于在字符串中查找所有符合正则表达式的子串。通过示例展示了如何使用findall(),并解析了返回结果的不同情况。此外,还提供了使用findall()提取网页中网址和锚文本的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:https://www.92python.com/view/439.html

在 Python 程序中,函数 findall() 的功能是在字符串中查找所有符合正则表达式的字符串,并返回这些字符串的列表。如果在正则表达式中使用了组,则返回一个元组。函数 re.match() 和函数 re.search() 的作用基本一样。不同的是,函数 re.match() 只从字符串中第一个字符开始匹配,而函数 re.search() 则搜索整个字符串。

使用函数 findall() 的语法格式如下所示:

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

下面的实例文件 fi.py 演示了使用函数 findall() 进行匹配的过程。

import re #导入模块re
#定义一个要操作的字符串变量s
s = "adfad asdfasdf asdfas asdfawef asd adsfas "
reObj1 = re.compile('((\w+)\s+\w+)')   #将正则表达式的字符串形式编译为 Pattern 实例
print(reObj1.findall(s))   #第1次调用函数 findall()
reObj2 = re.compile('(\w+)\s+\w+')    #将正则表达式的字符串形式编译为Pattern实例
print(reObj2.findall(s)) #第2次调用函数 findall()
reObj3 = re.compile('\w+\s+\w+')  #将正则表达式的字符串形式编译为Pattern实例
print(reObj3.findall(s)) #第3次调用函数 findall()

因为函数 findall() 返回的总是正则表达式在字符串中所有匹配结果的列表,所以此处主要讨论列表中“结果”的展现方式,即 findall 返回列表中每个元素包含的信息。

上述代码调用了三次函数 findall(),具体说明如下所示:
第 1 次调用:当给出的正则表达式中有多对小括号时,列表的元素为多个字符串组成的元组,元组中的字符串个数与小括号对数相同,字符串的内容与每个小括号内的正则表达式相对应,并且按小括号中出现的顺序排放。
第 2 次调用:当给出的正则表达式中有一对小括号时,列表的元素为字符串,此字符串的内容与小括号中的正则表达式相对应(不是整个正则表达式的匹配内容)。
第 3 次调用:当给出的正则表达式中不带小括号时,列表的元素为字符串,此字符串为整个正则表达式匹配的内容。

执行后会输出:

[('adfad asdfasdf', 'adfad'), ('asdfas asdfawef', 'asdfas'), ('asd adsfas', 'asd')]
['adfad', 'asdfas', 'asd']
['adfad asdfasdf', 'asdfas asdfawef', 'asd adsfas']

下面的实例文件 wangzhi.py 演示了使用函数 findall() 提取网址和锚文本的过程。

import re 
relink = '<a href="(.*)">(.*)</a>'
info = '<a href="http://www.baidu.com">baidu</a>'
cinfo = re.findall(relink,info)
print(cinfo)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值