下面的这个结构图基本覆盖了正则表达式上手基础的所有内容,总结自书《精通Python网络爬虫》,包括原子、元字符、模式修正、贪婪模式和懒惰模式以及常用函数等。
更加详细的见W3C的教程:https://www.w3cschool.cn/python/python-reg-expressions.html
原子
普通字符:
普通字符作为原子是指一些字母,数字,下划线等你需要完全匹配的字符,如想匹配字符串"adfadgadgpythonadfadf"
中的"python"
,
此时的"python"
就是普通字符。
非打印字符
常用非打印字符:
符号 | 含义 |
---|---|
\n | 用于匹配一个换行符 |
\t | 用于匹配一个制表符 |
通用字符
即一个原子可以匹配一类字符:
符号 | 含义 |
---|---|
\w | 匹配任意一个字母、数字或下划线 |
\W | 匹配除字母、数字和下划线以外的任意一个字符 |
\d | 匹配任意一个十进制数 |
\D | 匹配除十进制以外的任意一个其他字符 |
\s | 匹配任意一个空白字符 |
\S | 匹配除空白字符以外的任意一个其他字符 |
原子表
原子表定义一组地位平等的原子,匹配时会选取该表中任意一个原子进行匹配,例如[xyz]py
可以匹配到ypy
元字符
元字符即指正则表达式中的一些特殊含义的字符,如重复N次前面的字符等
符号 | 含义 |
---|---|
. | 匹配除换行符以外的任意字符 |
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
* | 匹配0次、1次或多次前面的原子 |
? | 匹配0次或一次前面的原子 |
+ | 匹配一次或多次前面的原子 |
{n} | 前面的原子恰好出现n次 |
{n,} | 前面的原子至少出现n次 |
{n,m} | 前面的原子至少出现n次,至多出现m次 |
| | 模式选字符 |
( ) | 模式单元符 |
模式修正
模式修正符即在不改变正则表达式的前提下改变正则表达式表达的含义,从而实现匹配结果的调整!
符号 | 含义 |
---|---|
I | 匹配时忽略大小写 |
M | 多行匹配 |
L | 做本地化识别匹配 |
U | 根据Unicode字符及解析字符 |
S | 让.匹配包括换行符,即用了该模式修正后,’.’就可以匹配任意字符 |
贪婪模式和懒惰模式
贪婪模式如p.*y
就是尽可能多的匹配,懒惰模式如p.*?
就是尽可能少的匹配,懒惰模式是就近匹配原则。更精准。而贪婪模式会一直匹配直到找到随后一个相应的字符才停止搜索
常用函数
函数 | 含义 |
---|---|
re.match() | 从源字符串的起始位置开始匹配 |
re.search() | 扫描整个字符串进行匹配 |
findall() | 根据正则表达式从源字符串中将匹配的结果全部找出,返回一个数组 |
re.sub() | 根据正则表达式实现替换某些字符串的功能 |