Python个人学习笔记(19):模块(正则表达式)
十、正则表达式
(一)基本含义
正则表达式是单独的一门语言,利用表达式的形式匹配字符串里面的内容。
最好在线写正则表达式,效率高
osChina在线正则测试
语法:
普通字符:类似abcdefg
元字符:具有特殊意义的符号(关键字)
作用:用表达式的形式来匹配字符串
只有连续的才能匹配
(二)基本元字符
元字符 | 含义 |
---|---|
. | 匹配所有除了换行符以外的其他所有东西 |
[ ] | 字符组,匹配[ ]中的内容 |
\w | 匹配所有数字、字母、下划线 |
\s | 匹配所有空白符 |
\d | 匹配所有数字 |
\W \S \D | 取反,比如匹配除了所有的空白符(了解) |
[^] | 字符组取反 |
^ | 开始 |
$ | 结束 |
( ) | 优先级,分组 |
元字符 | 含义 |
---|---|
. | 匹配所有除了换行符以外的其他所有东西 |
…:连续两个非换行符字符组合
a.a:a+非换行符字符+a
在Python中可以匹配换行符
元字符 | 含义 |
---|---|
[ ] | 字符组,匹配[ ]中的内容 |
坑:[.]只匹配.,因为[ ]内的内容都是普通字符,除了~
[a~z]:匹配所有小写字母
[0~9]:匹配所有数字
[A~Z]:匹配所有大写字母
常用于设置密码,[A~Z 0~ 9 a~z]
元字符 | 含义 |
---|---|
\w | 匹配所有数字、字母、下划线 |
在某些平台和条件下可以匹配中文,比如Python
可以用[A~ Z 0 ~ 9 a~z_]来防止出现匹配中文的情况
元字符 | 含义 |
---|---|
\s | 匹配所有空白符 |
空白符包括:空格、换行\n、回车\r、制表符\t
元字符 | 含义 |
---|---|
\d | 匹配所有数字 |
\W \S \D | 取反,比如匹配除了所有的空白符(了解) |
[^] | 字符组取反 |
^ | 开始 |
$ | 结束 |
^是指在开始的位置是否匹配,即是否以该字符开始的
主要用于防止用户没有按规则输入,比如手机号
^\d\d\d\d\d\d\d\d\d\d\d$
元字符 | 含义 |
---|---|
( ) | 优先级,分组 |
(三)量词
方便写代码的
描述前面的元字符出现的次数
\d{3}:三次\d
只能控制前面的字符
量词 | 含义 |
---|---|
+ | 匹配一次或多次,等同于{1,} |
\d+:可以表示\d\d…,很多个连续的\d
量词 | 含义 |
---|---|
* | 匹配0次或多次,等同于{0,} |
\d*:\d出现零次或多次,如果不是数字,有结果但不显示。
一般用于尽可能多地匹配时
量词 | 含义 |
---|---|
? | 匹配0次或1次,等同于{0,1} |
\d?:单个字符出现
量词 | 含义 |
---|---|
{n} | 固定匹配n次 |
{n,m} | 固定匹配n次到m次 |
{n,} | 固定匹配n次到无数次 |
\d{n}:n个数字为一组,匹配n次
\d{2,5}表示:
\d\d
\d\d\d
\d\d\d\d
\d\d\d\d\d
2次到5次
(四)贪婪匹配和惰性匹配
.* 表示提取最长的结果,即贪婪匹配
.* ?表示提取最短的结果,即惰性匹配,是一个回溯算法
例:提取json字符({name: qiaofu, age:18, hobby:“吃(喝)拉撒”})
callback xkjlkdjfkldsajklfjklas({name: qiaofu, age:18, hobby:“吃喝拉撒”})
只要括号里的内容,所以写(.*?),但是()是元字符,所以应该加\,所以为\(.?\)。但是如果()内部还有(),那么取到的结果不完整,所以应该去掉?,最后就是\(.\)
正则中,如果匹配普通字符,但是这个普通字符和元字符冲突的时候,需要用\进行转义,将元字符转义为普通字符