出品:Python数据之道(ID:PyDataLab)
作者:Peter,来自读者投稿
编辑:Lemon
玩转正则表达式
本文中介绍的是主要是 3
个知识点:
- 正则表达式的相关知识
Python
的中re
模块,主要是用来处理正则表达式- 一个利用
re
模块通过正则表达式来进行网页数据的爬取和存储
使用的系统 Python
版本和其他环境分别如下:
- npython 3.7.5
- MacOS
- jupyter notebook
- re # re 模块
- requests 2.23.0 # 发送请求
1、正则表达式
1.1 正则表达式及作用
正则表达式的英文是 regular expression
,通常简写为 regex、regexp
或者RE
,属于计算机领域的一个概念。
正则表达式的主要作用是被用来进行文本的检索、替换或者是从一个串中提取出符合我们指定条件的子串,它描述了一种字符串匹配的模式 pattern
。
目前正则表达式已经被集成到了各种文本编辑器和文本处理工具中。
1.2 应用场景
验证:比如在网站中进行表单提交时,进行用户名及密码的验证
查找:从给定的文本信息中进行快速高效地查找与分析字符串
替换:将我们指定格式的文本进行查找,然后将指定的内容进行替换
1.3 网站
在这里介绍几个用来学习和测试正则表达式的网站:
- 菜鸟教程-正则表达式
https://www.runoob.com/regexp/regexp-tutorial.html
- 正则表达式在线测试工具
https://tool.oschina.net/regex/
- GoRegex.cn
https://goregex.cn/
- 官方re模块学习
https://docs.python.org/zh-cn/3/library/re.html
- 正则表达式30分钟入门教程
https://deerchao.cn/tutorials/regex/regex.htm#mission
1.4 常用字符功能
先介绍常用正则表达式中几种特殊字符的功能:
字符类
字符 | 含义 | 例子 |
---|---|---|
. | 匹配任意一个字符 | ab.可以匹配abc或者abd |
[ ] | 匹配括号中的任意1个字符 | [abcd]可以匹配ab、bc、cd |
- | 在[ ]内表示的字符范围内进行匹配 | [0-9a-fA-F]可以匹配任意一个16进制的数字 |
^ | 位于[ ]括号内的开头,匹配除括号中的字符之外的任意1个字符 | [^xy]匹配xy之外的任意一个字符,比如[^xy]1可以匹配A1、B1但是不能匹配x1、y1 |
数量限定符
字符 | 含义 | 例子 |
---|---|---|
? | 匹配前面紧跟字符的0次或者1次 | [0-9]?,匹配1、2、3 |
+ | 匹配前面紧跟字符的1次或者多次 | [0-9]+,匹配1、12、123等 |
* | 匹配前面紧跟字符的0次或者多次 | [0-9]*,不匹配或者12、123 |
{N} | 匹配前面紧跟字符精确到N次 | [1-9][0-9]{2},匹配100到999的整数,{2}表示[0-9]匹配两个数字 |
{,M} | 匹配前面紧跟字符最多M次 | [0-9]{,1},指的是最多匹配0-9之间的1个整数,相当于是0次或者1次,等价于[0-9]? |
{N,M} | 匹配前面紧跟字符的至少N次,最多M次 | [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ,匹配IP地址,其中.号是特殊字符,需要使用转义字符\ |
位置相关
字符 | 含义 | 例子 |
---|