Regular Expressions
注意版本和文档!
常用工具
https://regex101.com/ https://regexr.com/ python re模块
字符
. 匹配任意一个字符
[] 匹配括号中的任意一个字符,如 [a-zA-Z1-3] 匹配大写字母或小写字母或数字1-3, [^] 匹配除了括号中的字符
预定字符类
\d 匹配数字
\D 匹配非数字
\w 匹配字母、数字或下划线
\W 匹配非字母、数字或下划线
\s 匹配空白字符或者tab
\S 匹配非空白字符
边界匹配
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配单词的边界, 如 \bthe\b 匹配the
\B 匹配非单词边界
数量词
* 匹配前面的字符0次或多次
+ 匹配前面的字符1次或多次
? 匹配前面的字符0次或1次
{n} 匹配前面的字符n次
{n,} 匹配前面的字符至少n次
{n,m} 匹配前面的字符至少n次, 至多m次
非贪婪匹配
量词默认是贪婪匹配, 即尽可能多的匹配字符, 如 a.*b 会匹配到最长的以a开头的b
后面的量词加上? 则为非贪婪匹配, 即尽可能少的匹配字符, 如 a.*?b 会匹配到最短的以a开头的b
分组与捕获
() 用来创建分组, 捕获括号中的字符, 并在匹配时返回匹配到的内容
[] 用来创建字符类, 如 [Pp] 匹配P或p
| 用来创建或关系, 如 a(bc|de) 匹配a后面是bc或de
\n 引用分组, 如 \1 引用第一个分组
$n 引用第n个分组
?: 非捕获分组, 如 (?:abc) 匹配abc, 不捕获匹配到的内容
前瞻和后顾
- 正向前瞻
(?=abc)匹配abc前面的字符 - 反向前瞻
(?!abc)匹配abc前面的字符 - 正向后顾
(?<=abc)匹配abc后面的字符 - 反向后顾
(?<!abc)匹配abc后面的字符