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

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

re模块使用:

1、findall查找所有,返回list

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

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

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

ret = re.match('a','abc').group()
print(ret)  # a

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

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

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

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

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

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

单独获取到正则表达式中的具体内容可以给分组取名字
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的效果:

案例代码: 

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"))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好皮~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值