python网络爬虫精解之正则表达式的使用说明
目录
- 一、常见的匹配规则
- 二、常见的匹配方法
- 1、match()
- 2、search()
- 3、findall()
- 4、sub()
- 5、compile()
一、常见的匹配规则
文章图片
二、常见的匹配方法
1、match()
match()方法从字符串的起始位置开始匹配,该方法有两个参数,第一个是正则表达式,第二个是需要匹配的字符串;
re.match(正则表达式,字符串)
如果该方法匹配成功,返回的是SRE_Match对象,如果未匹配到,则返回None。
返回成功后有两个方法,group()方法用来查看匹配到的字符串,span()方法用来输出匹配的范围。
import recontent = 'Hello_World,123 456'result = re.match('^Hello\w{6}\W\d\d\d\s\d{3}',content)print(result)print(result.group())print(result.span())
【运行结果】
子字符串匹配
Hello_World,123 456
(0, 19)
在上述我们匹配到了完整的字符串,但是实际需求中可能只需要其中的一部分,这时我们仅需要在要获取的子字符串匹配时加上括号即可。
import recontent = 'Hello_World,123 456'result = re.match('^Hello\w{6}\W(\d+)\s(\d{3})',content)print(result)print(result.group())print(result.span())print(result.group(1))print(result.group(2))
【运行结果】
这样通过加括号的形式,将字符串中的数字匹配出来。
Hello_World,123 456
(0, 19)
123
456
通用匹配符
.* 其中.用来匹配任意字符(除换行符),*代表前面出现的字符无限次。因此之前的匹配形式可以写为:
import recontent = 'Hello_World,123 456'result = re.match('^Hello\.*456$',content)print(result.group())
【运行结果】
【python网络爬虫精解之正则表达式的使用说明】Hello_World,123 456贪婪匹配和非贪婪匹配
.*匹配是贪婪匹配
.*?是非贪婪匹配
二者的主要区别是,贪婪匹配尽可能多的去匹配字符,而非贪婪匹配是尽可能少的匹配字符。下列代码能够更直观的了解二者之间的区别
import recontent = 'number 12345678 test'result_1 = re.match('^number.*(\d+).*test$',content)print('贪婪匹配得到的数字:' + result_1.group(1))result_2 = re.match('^number.*?(\d+).*test$',content)print('非贪婪匹配得到的数字:' + result_2.group(1))
【运行结果】
贪婪匹配得到的数字:8大家会有这样一个疑问为什么贪婪匹配得到的数字少,而非贪婪匹配得到的多,这与前面讲的不太符合啊。
非贪婪匹配得到的数字:12345678
注意,在匹配的时候,贪婪匹配是尽可能多的去匹配字符,因此.*就匹配的是' 1234567‘,只留下8给\d+匹配,非贪婪匹配是尽可能少的匹配字符,故.*?匹配的是' ',留下12345678给\d+匹配,就会得到上述结果。
修饰符
修饰符 | 作用 |
---|---|
re.I | 忽略大小写进行匹配 |
re.L | 做本地化识别匹配 |
re.M | 多行匹配,影响^和$ |
re.S | 使.匹配包含换行符在内的所有字符 |
re.U | 根据Unicode字符集解析字符 |
re.X | 更加灵活的编写正则表达式 |
转义匹配
匹配特殊字符时,在其前面加反斜线(\)完成转义匹配。
2、search()
在匹配时会扫描整个字符串,然后返回第一个成功匹配的结果。如果将整个字符串搜索完了之后还是没有匹配到,则返回None。
3、findall()
与search()不同的是,findall()方法是将返回所有符合正则表达式匹配的内容。返回结果是一个列表,列表中的每个元素都是元组类型。
4、sub()
修改文本内容,原理是对要修改的内容进行替换。
import retemp = "abcdef123ghi456"temp = re.sub("\d+","",temp)print(temp)
【运行结果】
abcdefghisub()中的参数分析,第一个参数是正则表达式匹配要更改的内容,第二个参数是使用该参数内容进行替换,第三个参数是要更改的字符串。
5、compile()
将正则字符串编译成正则表达式对象,以便在后面的匹配中进行复用。
到此这篇关于python网络爬虫精解之正则表达式的使用说明的文章就介绍到这了,更多相关python 正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 猎杀IP
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- 自媒体形势分析
- 数学大作战
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)