正则表达式初学笔记
学习自《python编程快速上手——让繁琐的工作自动化》
前置知识
关于正则表达式
正则表达式可以在文本中快速查找或修改某一类文本
也是爬虫等等技术的前置知识中重要的一个部分
正则表达式基本操作
1 | import re #导入正则表达式的库 |
正则表达式
正则表达式符号速查
符号 | 作用 | 备注 |
---|---|---|
\d |
匹配一个数字 | |
() |
分组 | 可以用\ 来转义() |
| | 匹配多个分组 | |
? |
实现可选匹配 | |
* |
匹配零次或一次 | |
+ |
匹配一次或多次 | |
{} |
匹配特定次数 | |
\D |
匹配0-9以外的任何字符 | |
\w |
匹配字母数字下划线 | |
\W |
匹配任何字母数字下划线以外的字符 | |
\s |
匹配空格制表换行符 | |
\S |
匹配任何空格制表换行符以外的字符 | |
^ |
用在开头,匹配以这个开头的字符串 | 例如^hello 匹配以hello开头的字符串 |
$$` | 用在结尾,匹配以这个结尾的字符串 | 例如`\d$$匹配以数字结尾的字符串 |
. |
通配符,匹配除了换行之外的所有字符 | |
.* |
匹配所有字符 | 注1贪心和非贪心 |
[abc] |
匹配括号内的任意字符 | 例如[aeiouAeiou] 匹配所有元音字母 |
正则表达式常用方法
方法 | 作用 | 备注 |
---|---|---|
Match.group(1) |
获取分组 | 0表示整个文本,1表示第一个分组 |
Match.groups() |
获取所有分组 | |
Regex.search() |
查找第一次匹配的文本,返回Match对象 | |
Regex.findall() |
查找所有匹配的文本,返回字符串列表 | |
Regex.sub(str1, str2) |
把str2中匹配的文本替换为str1 | 注2 |
正则表达式常用参数
参数 | 作用 | 备注 |
---|---|---|
re.DOTALL |
让. 匹配所有字符,包括换行符 |
re.compile() 的参数 |
re.IGNORECASE 或re.I |
忽略大小写 | re.compile() 的参数 |
re.VERBOSE |
忽略空白和注释 | 注3 |
其它
注1:贪心和非贪心匹配
python正则表达式默认贪心的,在有二义性时,尽量匹配更长的字符串,例如在hahahahaha时,ha{3, 5}
匹配hahahahaha
在{}
后跟?
使其变成非贪心的,在有二义性时,尽量匹配更短的字符串,例如在hahahahaha时,ha{3, 5}?
匹配hahaha
注2:可以用匹配文本的一部分替换文本本身
1 | # 直接用其它文本替换匹配文本 |
注3:忽略空白和注释
1 | phoneRegex = re.compile(r'''( |