打卡学习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"))
相关推荐
程序员龙叔12 小时前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
用户83562907805115 小时前
使用 Python 操作 Word 内容控件
后端·python
通信小呆呆15 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick16 小时前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee16 小时前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8617 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
码云骑士17 小时前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
YM52e17 小时前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨17 小时前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙