正则表达式
正则表达式:
官方定义: 正则表达式是对字符串操作的一种逻辑公式, 就是事先定义好的一些有特定字符, 以及这些特定字符的组合, 组成一个规则字符串,次字符串用来对字符串进行过滤.
正则表达式只能和字符串相关.
字符组: [ 字符组 ]
在同一个位置上可能出现的各种字符组成一个字符组,用 [ ] 表示, 字符可以有很多种 : 数字, 字母, 标点符号等
元字符 | 匹配内容 |
. | 匹配除换行符以外的其他任意字符 |
\w | 匹配数字字母下划线 |
\s | 匹配任意空白符 |
\d | 匹配数字 |
\n | 匹配换行符 |
\t | 匹配制表符 |
\b | 匹配一个单词的结尾 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
\W | 匹配非数字字母下划线 |
\S | 匹配非空白符 |
\D | 匹配非数字 |
a|b | 匹配a或匹配b |
() | 匹配括号内的表达式,表示一个组 |
[ ] | 匹配字符组内的字符 |
[^ ] | 匹配除了字符组内的所有字符 |
量词 :
量词 | 用法说明 |
* | 至少重复0次或者重复n次 |
+ | 至少重复1次或者重复n次 |
? | 重复0次或者1次 |
{ n } | 重复n次 |
{ n, } | 重复n次或者更多次 |
{ n, m } | 重复n到m次 |
贪婪匹配 :
在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
正则 | 带匹配字符 | 匹配结果 | 说明 |
<.*> | <script>....<script> | <script>....<script> |
默认为贪婪匹配, 会匹配符合匹配规则中最长的字符串 |
<.*?> | <script>....<script> |
<script> <script> |
表达式后加上?意思 将贪婪匹配转换为非贪婪匹配, 会在符合匹配规则的情况下 尽量匹配最短的字符串 |
非贪婪匹配 :
*? | 重复任意次,但会尽可能的少重复 |
+? | 重复一次或者更多次,但会尽可能的少重复 |
?? | 重复0次或者1次,但会尽可能的少重复 |
{ n, m }? | 重复n到m次,但会尽可能的少重复 |
{ n, }? | 重负n次后者更多次,但会尽可能的少重复 |
.*?的用法 :
. 是去任意字符
* 是取0到无穷
? 表示非贪婪模式
大多情况用在 : .*?x #意思就是去前面任意的任意字符,直到一个x出现.
转义符 \
正则表达式中,有很多有特殊意义的元字符,比如 : \d , \s等, 如果要在正则中匹配正常的 ' \d '而不是数字,就需要对 ' \ ' 进行转义,变成 ' \\ '.
正则 | 待匹配结果 | 匹配结果 | 说明 |
\d | \d | False | 因为在正则表达式中 ' \ '是具有特殊意义的字符,要匹配 ' \d '本身,表达式 \d 无效 |
\\d | \d | True | 转移 \ 后变成 \\ ,可以匹配 |
\\\\d | \\d | True | python中,字符串中的 \ 也需要转义 |
r'\\d' | r'\d' | True | 在字符串前加 r, 让整个字符串不转义 |