正则表达式笔记

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后面的字符