打卡学习Python爬虫第三天|python的re模块的使用

如何在python程序中使用正则表达式?就是使用re模块

re模块使用:

1、findall查找所有,返回list

python 复制代码
list = re.findall("n","I love learning English and Chinese!")
print(list)  # 输出结果:['n','n','n','n','n']
list = re.findall(r"\d+","这件物品的长度约为2米,宽度和高度均为50厘米。")
print(list)  # 输出结果:['5','5000']

2、search会进行匹配,返回匹配到的第一个结果,没有匹配到则返回None

python 复制代码
ret = re.search(r"\d","这件物品的长度约为2米,宽度和高度均为50厘米。").group()
print(ret)  # 输出结果:['5']

3、match只能从字符串的开头进行匹配

python 复制代码
ret = re.match('a','abc').group()
print(ret)  # a

4、finditer,和findall差不多,只不过这时返回的是迭代器(重点)

python 复制代码
it = re.finditer("n","I love learning English.")
for el in it:
    print(el.group())  # 依然需要分组

5、 compile()可以将一个长的正则表达式进行预加载,方便后面的使用

python 复制代码
obj = re.compile(r'\d{3}')  # 将正则表达式编译为一个正则表达式对象,规则要匹配的是3个数字
ret = obj.search('abc123eeee')  # 正则表达式对象调用search,参数为待匹配的字符串
print(ret.group())  # 结果:123

6、正则表达式中的内容如何单独提取

可以通过分组对正则表达式的内容进行进一步的筛选

python 复制代码
单独获取到正则表达式中的具体内容可以给分组取名字
s = """
<div class='西游记'><span id='10010'>中国联通</span><div>
"""

obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>\w+)</span>",re.S)

result = obj.search(s)  
print(result.group())  # 结果:<span id='10010'>中国联通</span>
print(result.group("id"))  # 结果:10010 # 获取id组的内容
print(result.group("name"))  # 结果: 中国联通  获取name组的内容

使用案例:

使用finditer的效果:

使用findall的效果:

案例代码:

python 复制代码
import re

# findall:匹配字符串中所有的符合正则表达式的内容
list = re.findall(r"\d+","我的电话号码是:10086,她的电话是123456")
print(list)

# finditer:匹配字符串中所有的符合正则表达式的内容,并返回一个迭代器,从迭代器中拿到内容需要 .group()
iter = re.finditer(r"\d+","我的电话号码是:10086,她的电话是123456")
for i in iter:
    # print(iter)
    # print(i)
    print(i.group()) # 获取匹配到的内容

# search:匹配字符串中第一个符合正则表达式的内容,找到返回一个对象,没有找到返回None,search全文匹配
s = re.search(r"\d+","我的电话号码是:10086,她的电话是123456")
print(s.group())

# match:匹配字符串时从头匹配
# m = re.match(r"\d+","我的电话号码是:10086,她的电话是123456")
# print(m.group())

# 预加载正则表达式,可以重复调用
pattern = re.compile(r"\d+")
list = pattern.findall("我的电话号码是:520522,她的电话是123456")
print(list)
iter = pattern.finditer("我的电话号码是:520520,她的电话是123456")
for i in iter:
    print(i.group())

s = """
<div class='天龙八部'><span id='1'>萧峰</span><div>
<div class='三国演义'><span id='2'>曹操</span><div>
<div class='庆余年'><span id='3'>范闲</span><div>
<div class='射雕英雄'><span id='4'>郭靖</span><div>
<div class='熊出没'><span id='5'>光头强</span><div>
"""
# re .S 忽略换行符(让.匹配换行符)
pattern = re.compile(r"<div class='(?P<class>.*?)'><span id='(?P<id>.*?)'>(?P<name>.*?)</span><div>",re.S)
# list = pattern.findall(s)
list = pattern.finditer(s)
for i in list:
   # print(i)
   print(i.group("class"),i.group("id"),i.group("name"))
相关推荐
kuiini4 分钟前
python学习-10【模块】
python·学习
知识分享小能手12 分钟前
mysql学习教程,从入门到精通,SQL ORDER BY 子句(14)
大数据·开发语言·数据库·sql·学习·mysql·大数据开发
她最爱橘了12 分钟前
AppStore评论爬虫
爬虫·python·gui·pyside6
没枕头我咋睡觉13 分钟前
【大语言模型_1】VLLM部署Qwen模型
python·语言模型
lkasi34 分钟前
python文字转wav音频
开发语言·python
哦豁灬1 小时前
NCNN 学习(2)-Mat
深度学习·学习·ncnn
Bruce小鬼1 小时前
最新版本TensorFlow训练模型TinyML部署到ESP32入门实操
人工智能·python·tensorflow
Length-vision1 小时前
Linux入门学习:Linux调试器gdb使用
linux·学习
白如意i1 小时前
如何在 Ubuntu 16.04 服务器上安装 Python 3 并设置编程环境
linux·python·ubuntu
繁依Fanyi1 小时前
使用 Spring Boot + Redis + Vue 实现动态路由加载页面
开发语言·vue.js·pytorch·spring boot·redis·python·算法