代码 | 说明 | 举例 |
. | 匹配除换行符外任意字符 |
[abc] | 字符集合,只能表示一个字符位置,匹配所包含的任意一个字符 | [abc]匹配plain中的’a’ |
[^abc] | 字符集合,只能表示一个字符位置,匹配除去集合内字符的任意字符 | [^abc]可以匹配plain中的p、l、a、i、或者n |
[a-z] | 字符范围,也是个集合,表示一个字符的位置,匹配所包含的任意一个字符 | 常用[A-Z][0-9] |
[^a-z] | 字符范围,也是个集合,表示一个字符的位置,匹配除去集合内字符的任意字符 |
\b | 匹配单词边界 | \bb在文本中找到单词中b开头的b字符 |
\B | 不匹配单词边界 | t\B包含t的单词但是不以t结尾的t字符,例如write,\Bb不以b开头的含有b的单词,例如able |
\d | [0-9] 匹配1位数字 |
\D | [^0-9]匹配一位非数字 |
\s | 匹配一位空白字符,包括换行符,制表符,空格[\f\r\n\t\v |
\S | 匹配一位非空白字符 |
\w | 匹配[a-zA-Z0-9_]包括中文的子 |
\W | 匹配除\w之外的字符 |
重复
代码 | 说明 | 举例 |
* | 表示前面的正则表达式会重复 | 单词中有e然后后边非空字符 |
+ | 表示前边的正则表达式重复至少一次 | e\w+单词中e后边至少有一个非空字符 |
? | 表示前边的正则表达式会重复0次或1次 | e\w?单词中e后边至多有一个非空字符 |
{n} | 重复固定的n次 | e\w{1}单词中e后边只能有一个非空字符 |
{n,} | 重复至少n次 | e\w{1,}等价于e\w+ e\w{0,}等价于e\w* e\w{0,1}等价于e\w? |
{n,m} | 重复n到m次 | e\w{1,10}单词中e后边至少1个,至多10个非空白字符 |
示例:
匹配手机号码:13552670000
\d{11}
匹配中国座机025-83105736 0534-7777777
\d{3-4}-\d{7-8}
代码 | 说明 | 举例 |
x|y | 匹配x或者y | wood took foot food 使用w|food 或者(w|f)ood |
捕获(pattern) | 使用小括号指定一个子表达式,也叫分组,捕获后会自动分配组号从1开始,可以改变优先级 |
\数字 | 匹配对应分组 | (very)\1匹配very very 但捕获的组group是very |
(?:pattern) |
?exp (?'name’exp | 通过name访问分组 python语法必须是(?Pexp) |
断言
代码 | 说明 | 举例 |
(?=exp) | 断言exp一定在匹配的右边出现,也就是说断言后边一定跟个exp | f(?=oo)f后边一定有oo出现 |
(?<=exp) | 断言exp一定在匹配的左边出现,也就是说前面一定有个exp前缀 | (?<=t)ook ook前一定有t出现 |
(?!exp) | 断言exp一定不会出现在右侧,也就是说断言后面一定不是exp | \d{3}(?!\d)匹配3位数字 断言3位数字后边一定不能是数字 |
(?<!exp) | 断言exp一定不能出现在左侧,也就是说断言前面一定不能是exp | (?<!f) ood ood的左边一定不是f |
(?#comment) | 注释 |
贪婪与非贪婪
代码 | 说明 | 举例 |
*? | 匹配任意次,但尽可能少重复 |
+? | 匹配至少一次,但尽可能少重复 |
?? | 匹配0次或1次 但尽可能少重复 |
{n,}? | 匹配至少n次 但尽可能少重复 |
{n,m}? | 匹配至少n次 至多m次 但尽可能少重复 |