Python进阶-正则表达式
Python进阶系列
Python进阶-网络编程-01
Python进阶-网络编程-02
Python进阶-网络编程-03
Python进阶-多任务编程-01
Python进阶-多任务编程-02
Python进阶-多任务编程-03
Python进阶-正则表达式
Python进阶-数据库编程-01
Python进阶-数据库编程-02
Python进阶-数据库编程-03
Python进阶-数据库编程-04
Python进阶-数据拷贝问题
Python进阶-模块导入问题
Python进阶-miniWeb框架
文章目录
- 9.1. 正则表达式概述
- 9.2. 测试工具介绍
- 9.3. 匹配单个字符
- 9.4. 匹配多个字符
- 9.5. 匹配开头结尾
- 9.6. re模块操作
- 9.7. 匹配分组之"|"
- 9.8. 匹配分组之"()"
- 9.9. 匹配分组之"\"
- 9.10. re模块的高级用法
- 9.11. 贪婪和非贪婪
- 9.12. r的作用
- 9.13. 案例:《简单爬虫-批量获取电影下载链接》
9.1. 正则表达式概述
- 正则表达式概念:规则表达式(一套特殊的规则)
- 正则表达式的作用:
- 验证数据的有效性(查找)
- 替换文本内容
- 从字符串中提取子字符串(爬虫思想)
9.2. 测试工具介绍
- regexBuddy :用来测试正则表达式的正确性
- 使用:
选择 python3.6
点击test选项卡
9.3. 匹配单个字符
9.4. 匹配多个字符
9.5. 匹配开头结尾
^
表示匹配以后一个字符开头# 必须以小写字母、大写字母、下划线开头 ^[a-zA-Z_]+\w
用在
[]
内部,用于取反# 匹配不含有 h 和 e 的字符 [^he]
$
表示匹配以前一个字符结尾# 以数字结尾 \d$
9.6. re模块操作
re模块的作用:python提供的用于正则操作的模块
re
模块的使用步骤:导入模块
import re
使用
match()
方法进行检测# 2、通过match方法,验证正则 # re.match("正则表达式","要验证/检测的字符串") # match()方法如果匹配成功,返回match object对象 # match()方法如果匹配失败,返回None正则字符串 要检测的内容 result re.match("\w{4,20}@163\.coms","hello@163.com")
判断是否检测/匹配成功
if result:print("匹配成功") else:print("匹配失败")
取出匹配的具体内容
result.group()
代码实例:
# 1.导入模块 import re# 2.使用match()方法进行检测 result = re.match("\w{4,20}@163\.com$","hello@163.com")# 3.判断是否检测/匹配成功 if result:print("匹配成功") else:print("匹配失败")# 4.取出匹配的具体内容 print("匹配结果:",result.group())
9.7. 匹配分组之"|"
|
的作用:或者关系,多个正则表达式满足其中一个即可# 引号内部不能出现非匹配的任何字符 # 判断0-100之间的数字 "^[0-9]?[0-9]$|^100$"
代码实例:
import reresult = re.match("^[0-9]?[0-9]$|^100$","13")if result:print("匹配成功") else:print("匹配失败")print("匹配结果:",result.group())
9.8. 匹配分组之"()"
分组,整体匹配
result = re.match("\w{4,20}@(163|126|qq|sina)\.com$","hello@qq.com")
提取子字符串
result = re.match("(\d{3,4})-(\d{7,8})","010-12345657") result.group() # 获取匹配的结果 result.group(1) # 获取第一个括号中的内容 result.group(2) # 获取第二个括号中的内容
代码实例:
import reresult = re.match("(\d{3,4})-(\d{7,8})","010-12345657")if result:print("匹配成功")print("匹配的结果:",result.group())print("提取区号:",result.group(1))print("提取电话号码:",result.group(2)) else:print("匹配失败")
9.9. 匹配分组之""
引用分组
\1
表示引用第一组result = re.match("<([a-zA-Z0-9]+)>.*</\\1>","<html>test</html>")result = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\\2></\\1>","<html><h1>test</h1></html>")
\\1
表示引用第一组,\\
是转义字符,转义后代表一个\
\\2
表示引用第二组代码实例:
import reresult = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\\2></\\1>","<html><h1>test</h1></html>")if result:print("匹配成功") else:print("匹配失败")print("匹配结果:",result.group())
分组起别名
起名:
?P<name>
给分组起别名,别名为name
引用别名:
(?P=name)
引用别名为name
的分组代码实例:
import reresult = re.match("<(?P<name1>[a-zA-Z0-9]+)><(?P<name2>[a-zA-Z0-9]+)>.*</(?P=name2)></(?P=name1)>","<html><h1>test</h1></html>")if result:print("匹配成功")else:print("匹配失败")print("匹配结果:",result.group())
9.10. re模块的高级用法
search()
在需要匹配的字符串中搜索要匹配的内容# result=re.search("正则表达式","要搜索的内容")result=re.search("\d+","阅次数:9999")
- 知道
match
和search
的区别- match从需要检测.group的字符串的开头位置匹配,如果失败返回None
- search从需要检测的字符串中搜索满足正则的内容,有则返回match object对象
- 知道
findall()
在需要匹配的字符串中查找所有满足正则的内容,返回值是列表# result = re.findall("正则表达式","要搜索的内容s")result = re.findall("\d+","阅读次数:9999,转发次数:6666,评论次数:38")
sub()
# sub("正则表达式","新的内容","要替换的字符串")# 将阅读次数,转发次数,评论次数都改为10000 result = re.sub("\d+","10000","阅读次数:9999,转发次数:6666,评论次数:38")
split()
# split("正则表达式”,"待拆分的字符串")# 以 ":" 或者 " " 拆分字符串 result = re.split(":| ","info:hello@162.com zhangsan lisi")
9.11. 贪婪和非贪婪
贪婪:满足正则的规则下,尽可能多的取内容
非贪婪:满足正则的情况下,尽可能少的取内容
把贪婪模式改为非贪婪模式,在
* ? + {}
后面加上?
代码实例:
import restr1 = """1131917_sma11,jpg" src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917 small.jpg" style="display:inline;">"""result = re.search("src=\"(.*?)\"",str1)if result:print("匹配成功")print("地址:",result.group(1)) else:print("匹配失败")print("匹配结果:",result.group())
9.12. r的作用
r
的作用:让正则中的\
表示原生的含义,仅仅对\
起作用代码实例:
import reresult = re.match(r"<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\2></\1>","<html><h1>test</h1></html>")if result:print("匹配成功") else:print("匹配失败")print("匹配结果:",result.group())
9.13. 案例:《简单爬虫-批量获取电影下载链接》
定义函数获取列表页的内容页地址
get_movie_links()
定义列表页的地址
https://www.ygdy8.net/html/gndy/dyzz/index.html
打开url地址,获取数据
解码获取到的数据
使用正则得到所有的影片内容页地址
4.1 遍历,取出内容页地址4.2 拼接内容页地址4.3 打开内容页地址4.4 获取数据,并读取4.5 解码内容页数据,获取html内容页文本4.6 使用正则,获取下载地址的连接4.7 把影片信息和下载链接,保存到字典中
4.8 返回字典
主函数
- 调用
get_movie_links()
,得到字典 - 遍历字典,显示下载内容
- 调用
代码实例:
import urllib.request import redef main():films_dict = get_movie_links()# print(films_dict)# 把字典遍历输出for file_name,file_link in films_dict.items():print("%s | %s" % (file_name,file_link))def get_movie_links():"""获取列表页影片信息"""# 1.定义列表页的地址 https://www.ygdy8.net/html/gndy/dyzz/index.htmlfile_list_url = "https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html"# 2.打开url地址,获取数据response_list = urllib.request.urlopen(file_list_url)# 通过read()读取网络资源数据response_list_data = response_list.read()# 3.解码获取到的数据response_list_text = response_list_data.decode("GBK")# 4.使用正则得到所有的影片内容页地址# print(response_list_text)# 4.1 使用findall() 根据正则查找所用影片对应的内容页地址# 返回的数据是个大列表,列表元素为元组,第一个元素是页面的url地址,第二个元素是影片名 称url_list = re.findall(r"<a href=\"(.*)\" class=\"ulink\">(.*) </a>",response_list_text)# 4.2 保存地址# 定义一个字典用于保存影片信息films_dict = {}i=1# 4.3 循环遍历 url_listfor content_url,file_name in url_list:content_url = "https://www.ygdy8.net" + content_urlprint("影片名称:%s, 内容页地址:%s" % (file_name,content_url))# 4.4 打开内容页地址response_content = urllib.request.urlopen(content_url)# 4.5 接收内容页数据# 4.6 读取网络资源response_content_data = response_content.read()# 4.7 解码得到内容页的文本内容response_content_text = response_content_data.decode("GBK")# 4.8 取出下载地址# print(response_content_text)result = re.search(r"magnet:\?xt=urn:btih: (.*)fannounce",response_content_text)# print("下载地址%d:" % i,result.group())# 字典# {"xxx":"XXX地址"}films_dict[file_name] = result.group()print("已经获取%d条信息" % i)i += 1return films_dictif __name__ == '__main__':main()
Python进阶-正则表达式相关推荐
- Python自学路线图之Python进阶
Python自学路线图的第二个阶段是Python进阶学习,自学完后需要掌握的Python技能: 1.自学Linux操作系统,熟练使用Linux操作系统: 自学网络编程,掌握网络编程相关技术, 能够实现 ...
- python进阶18正则表达式
原创博客链接:python进阶18正则表达式 正则基础知识 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ^`:匹配行首 `$`:匹配结尾 `*`:( ...
- Python进阶之正则表达式
1. 关于正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用 ...
- 【黑马-python进阶】---学习笔记(7)---线程、进程、协程、正则表达式
4 多任务-线程 4.1 多任务介绍 目标 知道多任务概念 多任务和单任务程序的区别 1.多任务解析 操作系统可以同时运行多个任务,现在,多核CPU已经非常普及,但是,即使过去的单核CPU,也可以执行 ...
- 知识点 —— Python进阶-3
Python进阶–3 单例模式 常用开发模式之一 用途 确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 A ...
- Python进阶--模块-re
Python进阶–模块-re 1. 正则表达式 正则表达式,在字符串处理业务中经常会用到.这里对正则表达式的匹配规则不再赘述,我们仅介绍Python的re模块. 2. findall 2.1 方法解析 ...
- js转义字符 php 反转义6,js进阶正则表达式6转义字符(加\转义)(.符号)(|符号)...
js进阶正则表达式6转义字符(加\转义)(.符号)(|符号) 一.总结 转义字符:{} () / $ # & * . ....... //3.特殊字符,都要加转义\ 点符号:var reg2= ...
- Python中正则表达式用法 重点格式以这个为准_首看_各种问题
20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...
- Python进阶之递归函数的用法及其示例
作者 | 程序员adny 责编 | 徐威龙 封图| CSDN│下载于视觉中国 出品 | AI科技大本营(ID:rgznai100) 本篇文章主要介绍了Python进阶之递归函数的用法及其示例,现在分 ...
最新文章
- 新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死——原因与解决方案
- Ubuntu12.04不能切换输入法
- Python中的线程、进程、协程以及区别
- 测试使用skywalking_skywalking初体验
- 倒计时 3 天!1024 程序员节全日程曝光,105 场深度演讲点燃数字经济新时代
- IDEA中启动tomcat
- 洛谷—— P1268 树的重量
- PIE SDK导出图片
- C语言通过枚举网卡,API接口可查看man 7 netdevice--获取接口IP地址
- OZ Report 오즈 리포트 개발
- LayaAir Geolocation 获取地理位置
- Win10(11)下Qt6.2编译Qtxlsx库
- (word、ppt、excel)​office怎么删除历史文档记录
- Subset sum problem
- oracle逗号隔开行转列_oralce逗号分割变多行-Oracle
- android声音大小锁定,固定音量锁(锁定音量)app
- 从首个IMO季军谈起 作者 : 付云皓
- 用了接口还有必要用抽象类吗?
- ubuntu 禁用笔记本触摸板
- 智能时代,三步让自己不再焦虑
热门文章
- html5图片按钮播放,html 播放 按钮
- 服装进销存管理软件哪个比较好用?
- VRChat与Anthos Capital携手合作,完成8,000万美元的D轮融资
- 搭建高可用oVirt(hosted engine)
- mac上metersphere本地开发环境搭建
- BCset BC set how entry is inserted to Database table when activated
- 在CentOS 7最小环境下安装Cinnamon桌面环境
- gitpc段提交失败schannel: next InitializeSecurityContext failed: Unknown error (0x80092013
- kotlin的必修之路
- stormzhang的自我介绍