是什么:
通过一个规则来从一段字符串中找到符合规则的内容,或者判断某段字符串是否符合规则
有什么用:
注册页/网页上,要求输入一个信息,判断输入的信息格式是否正确
爬去信息,从网页上把代码,以字符串的形式下载回到内存,提取这个大字符串中想要的内容
怎么用:
1,字符组:约束字符中某一个字符位置上的值是什么,只要是出现在字符组中的内容,都算匹配到了
2,从小到大的顺序是根据ASCII码的顺序来的
正则 | 待匹配字符 | 匹配结果 | 说明 |
[0123456789] | 8 | True | 在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都是为可以匹配 |
[0123456789] | a | False | 由于字符组中没有'a'字符,所以不能匹配 |
[0-9] | 7 | True | 也可以用-表示范围,[0-9]就和[0123456789]是一个意思 |
[a-z] | s | True | 同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示 |
[A-Z] | B | True | [A-Z]就表示所有的大写字母 |
[0-9a-fA-F] | e | True | 可以匹配数字,大小写形式的a~f,用来验证十六进制字符 |
字符: ^永远放在规则的开始,$永远放在规则的结尾
元字符 | 匹配内容 |
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
\b | 匹配一个单词的结尾 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
\W | 匹配非字母或数字或下划线 |
\D | 匹配非数字 |
\S | 匹配非空白符 |
a|b | 匹配字符a或字符b |
() | 匹配括号内的表达式,也表示一个组 |
[...] | 匹配字符组中的字符 |
[^...] | 匹配除了字符组中字符的所有字符 |
量词:
量词 | 用法说明 |
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
贪婪匹配:正则表达式本身就是贪婪匹配的,在满足匹配时,匹配尽可能长的字符串
惰性匹配: 量少匹配,需要在量词后面加上一个❓
最常见的用法 : .*?标识,标识匹配任意长度的字符遇到标识就立刻停止
看正则表达式的话,怎么区分:
找元字符,元字符后面如果出现量词,那么这个量词就是约束这个元字符出现的次数
如果元字符后面如果不出现量词,表示这个元字符匹配一次
如果在量词后面还有❓ 表示惰性匹配
转义符 : \
在正则表达式中,有很多有特殊意义的是元字符,比如\d和\s等,如果要在正则中匹配正常的"\d"而不是"数字"就需要对"\"进行转义,变成'\\'。
在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\d",字符串中要写成'\\d',那么正则里就要写成"\\\\d",这样就太麻烦了。这个时候我们就用到了r'\d'这个概念,此时的正则是r'\\d'就可以了
在正则表达式中,涉及到特殊转义的内容,都放在"r"中
在工具网页上匹配成功后,在python中匹配不成功,匹配的字符串中又带有转义符(\),那么直接将测试好的内容都放在"r"中