关于re库在实战后的快速上手小结

  • 一、re库中的函数
    • 1.re库中的match()函数
      • (1)match()函数-最常规的匹配
      • (2)match()函数-泛匹配
      • (3)match()函数-选择目标匹配
      • (4)match()函数-贪婪与非贪婪匹配
      • (5)match()函数-多行匹配
      • (6)match()函数-特殊字符转义后匹配
    • 2.re库中的search()函数
      • (1)search()函数与match()函数的区别
      • (2)search()函数的实战演练
    • 3.re库中的findall()函数
      • (1)findall()函数与search()函数的区别
    • 4.re库中的sub()函数
      • (1)sub()函数的替换作用
      • (2)sub()函数的实战演练
    • 5.re库中的compile()函数

一、re库中的函数

1.re库中的match()函数

(1)match()函数-最常规的匹配

从首个字符开始匹配,如果开头匹配不到则后面全匹配不到(人生的扣子从第一颗开始就要扣好)

import recontent = "Hello 123 4567 World_this is a Regex Demo"
print(len(content))
result = re.match("^Hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$",content)
print(result)
print(result.group())# 直接输出match到的结果
print(result.span())# 输出匹配到的结果的范围

(2)match()函数-泛匹配

import recontent = "Hello 123 4567 World_this is a Regex Demo" # 最常规的匹配
print(len(content))
result = re.match("^Hello.*Demo$",content)
print(result)
print(result.group())# 直接输出match到的结果
print(result.span())# 输出匹配到的结果的范围

(3)match()函数-选择目标匹配

import recontent = "Hello 1234567 World_this is a Regex Demo" # 最常规的匹配
print(len(content))
result = re.match("^Hello\s(\d+)\sWorld.*Demo$",content)
print(result)
print(result.group(1))# 直接输出match到的结果中的第一个()中的内容
print(result.span())# 输出匹配到的结果的范围

(4)match()函数-贪婪与非贪婪匹配

import recontent = "Hello 1234567 World_this is a Regex Demo"
result1 = re.match("^He.*(\d+).*World.*Demo$",content)
result2 = re.match("^He.*?(\d+).*World.*Demo$",content)
print(result1)
print(result2)
print(result1.group(1))
print(result2.group(1))

(5)match()函数-多行匹配

import re
content = """Hello 1234567 World_this
is a Regex Demo"""
result = re.match("^He.*?(\d+).*?Demo$",content)
print(result)
print(result.group(1))# 直接输出match到的结果中的第一个()中的内容
import re
content = """Hello 1234567 World_this
is a Regex Demo"""
print(len(content))
result = re.match("^He.*?(\d+).*?Demo$",content,re.S)
print(result)
print(result.group(1))# 直接输出match到的结果中的第一个()中的内容

(6)match()函数-特殊字符转义后匹配

import re
content = 'price is $5.00'
result = re.match('price is $5.00',content)
print(result)
import re
content = 'price is $5.00'
result = re.match('price is \$5\.00',content)
print(result)

2.re库中的search()函数

(1)search()函数与match()函数的区别

re.search()扫描整个字符串并返回第一个成功的匹配,没有了re.match()的首字符必须一致的限制。相对于re.match来说re.search更加灵活

import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.match("Hello.*?(\d+).*?Demo",content)
print(result)
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.search("Hello.*?(\d+).*?Demo",content)
print(result)

(2)search()函数的实战演练

import rehtml = """<div id="songs-lsit"><h2 class="title">"经典老歌"</h2><p class="introduction">经典老歌列表</p><ul id="list" class="list-group"><li data-view="2">一路有你</li><li data-view="7"><a href="/2.mp3" singer="任贤齐">沧海一声笑</a></li><li data-view="4"class="active"><a href="/3.mp3" singer="齐秦">往事随风</a><li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li><li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li><li data-view="5"><a href="/6.mp3" singer="邓丽君"><i class="fa fa-user"></li>但愿人长久</a></li></ul>
</div>
"""result1 = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)
if result1:print(result1.group(1),result1.group(2))result2 = re.search('<li.*?singer="(.*?)">(.*?)</a>',html,re.S)
if result2:print(result2.group(1),result2.group(2)) result3 = re.search('<li.*?singer="(.*?)">(.*?)</a>',html)
if result3:print(result3.group(1),result3.group(2))

3.re库中的findall()函数

(1)findall()函数与search()函数的区别

与search()函数相比,findall()函数匹配的内容更多,findall()函数可以提取所有符合正则表达式的字符串而不像search()函数只能提取第一个

import rehtml = """<div id="songs-lsit"><h2 class="title">"经典老歌"</h2><p class="introduction">经典老歌列表</p><ul id="list" class="list-group"><li data-view="2">一路有你</li><li data-view="7"><a href="/2.mp3" singer="任贤齐">沧海一声笑</a></li><li data-view="4"class="active"><a href="/3.mp3" singer="齐秦">往事随风</a><li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li><li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li><li data-view="5"><a href="/6.mp3" singer="邓丽君">但愿人长久</a></li></ul>
</div>
"""results = re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>',html,re.S)
print(type(results),"\n")
for result in results:print(result)# 进阶复杂版
results = re.findall('<li.*?>\s*?(<a.*?>)?(\w+)(</a>)?\s*?</li>',html,re.S)
print(results)
for result in results:print(result[1])


4.re库中的sub()函数

(1)sub()函数的替换作用

re.sub()函数可以替换字符串中每一个匹配的字符串后返回替换后的字符串

import re
content = 'Extra stings Hello 1234567 World_This is a 7654_myname_321 Regex Demo Extra stings'
content1 =re.sub('\d+','',content)
print(content1)content2 =re.sub('\d+','Replacement',content)
print(content2)content3 =re.sub('(\d+)',r'\1 8910',content)
print(content3)

(2)sub()函数的实战演练

import rehtml = """<div id="songs-lsit"><h2 class="title">"经典老歌"</h2><p class="introduction">经典老歌列表</p><ul id="list" class="list-group"><li data-view="2">一路有你</li><li data-view="7"><a href="/2.mp3" singer="任贤齐">沧海一声笑</a></li><li data-view="4"class="active"><a href="/3.mp3" singer="齐秦">往事随风</a></li><li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li><li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li><li data-view="5"><a href="/6.mp3" singer="邓丽君">但愿人长久</a></li></ul>
</div>
"""
html = re.sub("<a.*?>|</a>","",html) # |是或的意思,去除<a>或</a>,两者皆有则都去掉
print(html)results = re.findall("<li.*?>(.*?)</li>",html,re.S)
print(results,"\n")for result in results:print(result.strip()) # 去掉\n和空格

5.re库中的compile()函数

re.compile()可以将一个正则表达式编译成正则对象,便于复用该匹配模式

import re
content = """Hello 1234567 World_this
is a Regex Demo"""pattern = re.compile("Hello.*Demo",re.S)
result = re.match(pattern,content)
print(result)
import re
content = """Hello 1234567 World_this
is a Regex Demo"""result =re.match("Hello.*Demo",content,re.S)
print(result)

【爬虫剑谱】三卷2章 拾遗篇-有关于re库的使用小结相关推荐

  1. 【爬虫剑谱】三卷3章 拾遗篇-有关于bs4库中的BeautifulSoup模块使用小结

    关于bs4库中的BeautifulSoup模块在实战后的快速上手小结 一.BeautifulSoup 模块 1.将 Beautiful 对象实例化的两种方法 (1)将本地 HTML 文档转为 Beau ...

  2. 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结

    关于lxml库下etree模块中Xpath表达式在实战后的快速上手小结 一.Xpath表达式 1. 将 etree 对象实例化的两种方法 (1)etree.parse() 转本地HTML文档 (2)e ...

  3. 爬虫剑谱第十页(关于拼多多商品信息的爬取<修改版>)

    关于此前发布了一篇关于爬取拼多多商品信息的博客:爬虫剑谱第七页(输入关键词爬取拼多多商品信息并进行保存)_独一无二的李狗蛋儿的博客-CSDN博客出现了问题,运行结束后无法返回数据,up主在这里重新进行 ...

  4. 【爬虫剑谱】二卷7章 实战篇-搭建IP代理池绕过反爬检测

    Python\网络爬虫\IP代理 一.源代码 二.实战总结 1.如何生成API链接 2. 如何获取API生成的IP 三.参考文献 一.源代码 import requests import random ...

  5. 【爬虫剑谱】二卷4章 实战篇-模拟登录铁路12306网站(滑块验证)

    Python\网络爬虫\Selenium 一.源码 二.实战总结 问题一:不愿意代码模块化(常见于我这种菜狗+懒狗) 三.参考文献 一.源码 from selenium import webdrive ...

  6. 【爬虫剑谱】一卷3章 软件篇-Anaconda的安装及配置

    Python\软件应用\Anaconda 一.Anaconda下载地址 二.Anaconda安装图示 三.Anaconda检测是否安装成功 一.Anaconda下载地址 1.官网地址:https:// ...

  7. 【爬虫剑谱】一卷2章 软件篇-EdgeDriver的安装及配置

    Python\网络爬虫\selenium\浏览器驱动程序 一.EdgeDriver下载地址 二.EdgeDriver安装图示   使用selenium模块前需要先下载和安装浏览器驱动程序(用来模拟真人 ...

  8. 【爬虫剑谱】一卷1章 软件篇-Mongodb的安装及配置

    Mongodb 一.Mongodb下载地址 二.Mongodb安装图示 三.Mongodb环境变量 四.Mongodb可视化软件Rotot 3T安装 一.Mongodb下载地址 网盘链接:https: ...

  9. 【爬虫剑谱】二卷2章 实战篇-精美动漫图片爬取并保存

    此次实战用到了的模块为requests.re.os. 一.源码 二.在学习过程中可能会遇到的问题 问题1:正则表达式无法识别,什么都爬取不到 一.源码 import requests import r ...

最新文章

  1. 语言趣味编程100例无水印_趣味c语言编程100例(三)
  2. VUE—从入门到飞起(一)
  3. nginx tcp转发_Nginx学习(九):负载均衡服务
  4. 判断浏览器是否为手机端 is mobile
  5. 视频盒子APP视频播放源代码安卓+IOS双端源码
  6. UCHome风格模版 框架核心代码提取
  7. [抽奖系统下载]多进程现场抽奖展示系统V2-双屏PPT版-专业抽奖展示工具-具有强劲引擎的抽奖系统-PPT双屏技术深度应用,国内唯一
  8. vs2019的mfc学习
  9. 数学建模常用解题方法
  10. vs2019中git提交代码的步骤
  11. Java练习题——运算符
  12. 三、单因素方差分析例题(R语言)
  13. 用excel数据批量填充word表格
  14. excel文件解密打开密码
  15. uniapp 微信支付功能
  16. 【DL】为什么需要深度学习:模组化、端到端学习(语音识别、图像处理情景)、类比逻辑电路
  17. 钛资本研究院:创业公司如何搭建高管团队,实现组织跃升?
  18. Charles抓包显示<unknown>解决方案
  19. 实习笔记——电力通信网
  20. 1.5小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:低于18.5:过轻;18.5-25:正常;25-28:过重;28-32:肥胖

热门文章

  1. 美团知识图谱问答技术及在商家推荐回复场景中的实践与探索
  2. 【干货】智能汽车行业“十年十大预测”.pdf(附下载链接)
  3. 【白皮书分享】2020智能体白皮书-华为.pdf(附下载链接)
  4. 【报告分享】德勤-教育行业发展报告(政策、资本、AI、职业教育).pdf2019年中国外卖产业调查研究报告.pdf...
  5. 【文末福利】算法大赛评委共话技术趋势,这场直播值得一看!
  6. 为什么c语言运行了是cmd,为什么C语言的程式码执行都在命令提示符进行?而且学习的基本都是数学问题,跟开发软体有什么关系?...
  7. java eventbus 原理_本文为 Android 开源项目实现原理解析 EventBus 部分,从源码分析 EventBus 的实现原理...
  8. C++STL之优先队列
  9. Leetcode每日一题:42.trapping-rain-water(接雨水)
  10. 蓝桥杯 基础练习 阶乘计算