正则表达式
- 是由普通字符(例如字符 a 到 z)以及元字符组成的字符串
- 该字符串描述了按照某种模式去匹配要被搜索的字符串
普通字符
- 包括没有显式指定为元字符的所有可打印和不可打印字符
- 即包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号
- 普通字符只能匹配它自己
特殊字符: 字符’'加一个字符(某些)组成的字符
字符 | 描述 |
---|
\w | 匹配字母、数字及下划线 |
\W | 匹配不是字母、数字及下划线的字符 |
\d | 匹配任意数字,等价于 [0-9] |
\D | 匹配任意非数字的字符 |
\A | 匹配字符串开头 |
\Z | 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串结尾,如果存在换行,同时还会匹配换行符 |
\s | 匹配任何空白字符 |
\S | 匹配任何非空白字符 |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
最后四个并不常用
元字符
- 如果要匹配元字符本身的话要在该字符前加’’ 例如:. 可以匹配 .
字符 | 描述 |
---|
^xxx | 如果字符串以xxx开头,匹配xxx(是普通字符) |
yyy$ | 如果字符串以yyy结尾,匹配yyy(与xxx一样) |
* | 匹配前面的单字符零次或多次 |
+ | 匹配前面的单字符一次或多次 |
? | 匹配前面的单字符零次或一次 |
{n} | 匹配左侧紧邻的单字符 n 次(n>=0) |
{n,} | 至少匹配左侧紧邻的单字符 n 次(n>=0) |
{n,m} | 尽可能多的匹配左侧紧邻的单字符,但匹配次数间于[n,m]之间 (0<=n<=m) |
. | 匹配除换行符之外的任何一个字符 |
a|b | 先匹配a,匹配不上,在匹配b |
[xyz] | 匹配[]所包含的任意一个字符 |
[^xyz] | 匹配[]未包含的任意字符, 即与[xyz]匹配结果相反 |
[a-z] | 匹配指定范围(这里是a-z)内的任意字符 |
[^a-z] | 匹配任何不在指定范围内的任意字符, 即与[a-z]匹配结果相反 |
() | 匹配括号内的表达式(会被标记,被标记表达式会依次对应每一个分组) |
贪婪与非贪婪
- 贪婪模式:尽可能多的匹配所搜索的字符串。
- 元字符 (*, +, ?, {n}, {n,}, {n,m})的匹配模式是贪婪的
pattern = '^He.*(\d+).*Demo$'
content = 'Hello 1234567 World_This is a Regex Demo'
- 非贪婪模式:尽可能少的匹配所搜索的字符串
- 贪婪的元字符后面紧跟元字符**?**时他们是非贪婪的
patern = '^He.*?(\d+).*Demo$'
content = 'Hello 1234567 World_This is a Regex Demo'
技巧
继续学习