Re正则表达式

官方文档

https://docs.python.org/zh-cn/3/library/re.html

简介

正则表达式,就是使用
普通字符(大小写字母、数字···)、
转义字符(\w \W \D \d)、
特殊字符(. * ? + ^ $ [] {} ()
组成一个规则,用这个规则对文本的类容完成一个搜索或匹配或替换的功能。

基本语法

import re
# 定义字符串
a='doitbyyourself666'
# 定义正则表达式
reg='yourself'
# 调用正则函数方法
res=re.findall(reg,a)[0]
print(res)

在这里插入图片描述

re模块相关函数

re.match()

从头匹配
要么第一个符合要求,要么不符合
匹配成功则返回match对象,否则返回None
可以使用group()方法获取对象  print(res.group())
可以使用span()方法获取匹配的数据的下标区间

在这里插入图片描述
第一个print函数会打印none,因为match函数只能从头开始匹配,不能从中间开始。而当返回值为none时,再次调用group()方法就会出现AttributeError: 'NoneType' object has no attribute 'span'这类报错。
修改后
在这里插入图片描述
re.search()

从字符串开头到结尾进行搜索式匹配
若整个字符串都没有匹配到,则失败,返回None

re.findall()

按照正则表达式的规则在字符串中匹配所有符合规则的元素,结果返回一个列表,若没,则返回空列表

tip

转移符号意义
\D单个非数字
\d单个数字
\w单个数字、字母、下划线
\W单个非 数字、字母、下划线
\s单个空格符或制表符
\S单个非 空格符或制表符

在这里插入图片描述

re.finditer()

按照正则表达式的规则在字符串中匹配所有符合规则的元素,返回一个迭代器

re.sub()

按照正则表达式的规则,在字符串中找到需要被替换的字符串,来完成一个替换
参数:
    pattern:正则表达式的规则,匹配需要被替换的字符串
    repl:   替换后的字符串
    string: 被替换的原始字符串

re.compile()

可以直接将正则表达式定义为 正则对象,使用正则对象直接操作
(通俗:方便遍历操作)

tip:

reg = '.'  
. 点代表单个的 任意字符 除了换行符之外
reg = '\w*'*,那么一直从开始一直匹配,直到不符合匹配规则结束返回
reg = '\w+'+,匹配次数至少一次,若开始不符合,则继续向后再匹配一次,后面和*一样
reg = 'w+?'
?,拒绝贪婪,区别:完成前面的匹配规则就返回

实战

import json
import requests, re
url = 'https://old.lmonkey.com/ask'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67'}

res = requests.get(url, headers)

if res.status_code == 200:
    # 获取返回数据
    res.html = res.text
    reg = '<div class="topic_title mb-0 lh-180 ml-n2">(.*?)<small'
    titlelist = re.findall(reg, res.html)
    # 定义解析作者的正则
    reg = '<strong>(.*?)</strong>'
    authorlist = re.findall(reg, res.html)
    #print(authorlist)
    # 定义解析时间的正则
    reg = '<span data-toggle="tooltip" data-placement="top" title="(.*?)">'
    datelist = re.findall(reg, res.html)
    # 定义解析url的正则
    reg = '  <a href="(.*?)" target="_blank">'
    urllist = re.findall(reg, res.html)

    # 压缩数据
    data = list(zip(titlelist, authorlist, datelist, urllist))
    print(data)
    datalist = [{'title': i[0], 'url':i[1], 'author':i[2], 'data':[3]} for i in data]

    #数据入库
    with open('./redata.json', 'w' , encoding='utf-8') as fp:
        json.dump(datalist, fp)

redata.json经过格式后如图所示
工具:https://www.sojson.com/
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值