打卡学习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"))
相关推荐
咔叽布吉17 分钟前
【前端学习笔记】AJAX、axios、fetch、跨域
前端·笔记·学习
IRevers25 分钟前
使用Python和Pybind11调用C++程序(CMake编译)
开发语言·c++·人工智能·python·深度学习
cdut_suye1 小时前
C++11新特性探索:Lambda表达式与函数包装器的实用指南
开发语言·数据库·c++·人工智能·python·机器学习·华为
weixin_543662861 小时前
BERT的中文问答系统36-1
人工智能·python·bert
weixin_431470861 小时前
人名分类器(nlp)
人工智能·pytorch·python·深度学习·自然语言处理
努力更新中1 小时前
Python浪漫之画一个音符♪
开发语言·python
泰山小张只吃荷园1 小时前
期末Python复习-输入输出
java·前端·spring boot·python·spring cloud·docker·容器
凤枭香1 小时前
Python Selenium介绍(二)
开发语言·爬虫·python·selenium
谢白羽1 小时前
深度神经网络模型压缩学习笔记三:在线量化算法和工具、实现原理和细节
笔记·学习·dnn
工业互联网专业2 小时前
Python毕业设计选题:基于django+vue的期货交易模拟系统的设计与实现
vue.js·python·django·毕业设计·源码·课程设计