正则表达式匹配大全

python中的re模块:

常用的语法

通配符 含义 正则示例 匹配结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
`reg1 | reg2` 匹配正则表达式reg1或reg2 foo | bar foo

`.` 匹配任何字符(\n除外) a.a abc

`^ 匹配字符串起始部分 ^a ab....

`$` 匹配字符串终止部分 .txt$ a.txt

`*` 匹配0次或者多次前面出现的正则表达式 a* aaaaa

`+` 匹配1次或者多次前面出现的正则表达式 [a-z]+ aasx

`?` 匹配0次或者1次前面出现的正则表达式 first? first

`{N}` 匹配N次前面出现的正则表达式 *.c{2} first.c abc.c

`{M,N}` 匹配M~N次前面出现的正则表达式 *.c{0,1} one.c

`[...]` 匹配来自字符集的任意单个字符 [abc] b

`[...x-y...]` 匹配x~y范围中的任意单个字符 [0-9] 9

`[^...]` 不匹配次字符集中任意单个字符 [^0-9] a

`(*|+|?|{})?` 匹配上面频繁出现符号的非贪婪版 (*|+|?|{})? ({})

`(...)` 匹配封闭的正则表达式,然后另存为子组 ([0-1][0-9])? 12

`\d` 匹配任何十进制数字 \d.txt 1.txt

`\w` 匹配任何字母数字字符 \w{2}txt 1.txt

`\s` 匹配任何空格字符 a\sb a b

`\b` 匹配任何单词边界 The\bdog The dog

`\N` 匹配已保存的子组 ([0-9])\1 1

`\.` 匹配"."这个字符 a\.txt a.txt

正则表达式 描述 匹配结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
`\d+(\.\d*)?` 任意整数和浮点数 0.004 2 75.

`\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b `首字母只能大写 Boo Foo

`^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w-.\/\?%&=\u4e00-\u9fa5]*)?)?$` 验证网址 http://www.baidu.com/?id=1

`^[\u4e00-\u9fa5]{0,}$` 验证汉字 汉字汉字

`\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` 验证电子邮件 example@163.com

`^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$` 验证身份证 14525419951215445X

`^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8} `验证手机号 138459572***

`^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ `验证IP 192.168.1.1

`^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.s|)$` 验证域名 baidu.com

`^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$` 验证文件路径 C:\user\wo

`<(.*)>(.*)<\/(.*)>|<(.*)\/>` HTML标签匹配 xxxx

常用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
`compile(pattern, flags = 0)   `     匹配任何可选的标记来编译正则表达式的模 式,然后返回一个正则表达式对象

`match(pattern, string, flags = 0)  `   使用带有可选标记的正则表达式的模式来匹配字符串。如果匹配成功,返回匹配对象,否则返回None

`search(pattern, string ,flags = 0)  `   使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹配对象,否则返回None

`findall(pattern, string[,flags] )  `    查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表

`finditer(pattern, string[,flags] )  `    与findall()相同,但返回的是一个迭代器。对于每一次匹配,迭代器都能返回一个匹配对象

`split(pattern, string, max = 0)    `  根据正则表达式的模式分隔符,split函数将字符串分割为列表,返回匹配列表,分割最多操作max次

`group(num = 0)     `        返回整个匹配对象,或者编号为num的特定子组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77


`^` 匹配字符串的开头

`$ `匹配字符串的末尾。

`.` 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

`[...] `用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'

`[^...]` 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。

`re*` 匹配0个或多个的表达式。

`re+` 匹配1个或多个的表达式。


`re?` 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

`re{ n}` 匹配n个前面表达式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。

`re{ n,}` 精确匹配n个前面表达式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+""o{0,}"则等价于"o*"

`re{ n, m}` 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

`a| b` 匹配a或b

`(re)` 匹配括号内的表达式,也表示一个组

`(?imx)` 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。

`(?-imx)` 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。

`(?: re)` 类似 (...), 但是不表示一个组

`(?imx: re)` 在括号中使用i, m, 或 x 可选标志

`(?-imx: re)` 在括号中不使用i, m, 或 x 可选标志

`(?#...)` 注释.

`(?= re)` 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。

`(?! re)` 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。

`(?> re)` 匹配的独立模式,省去回溯。

`\w` 匹配数字字母下划线

`\W` 匹配非数字字母下划线

`\s` 匹配任意空白字符,等价于 [\t\n\r\f]。

`\S` 匹配任意非空字符

`\d` 匹配任意数字,等价于 [0-9]。

`\D` 匹配任意非数字

`\A` 匹配字符串开始

`\Z` 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。

`\z` 匹配字符串结束

`\G` 匹配最后匹配完成的位置。

`\b` 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

`\B` 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

`\n, \t,` 等。 匹配一个换行符。匹配一个制表符, 等

`\1...\9` 匹配第n个分组的内容。

`\10` 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。


正则表达式实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[Pp]ython 匹配 "Python""python"

rub[ye] 匹配 "ruby""rube"

[aeiou] 匹配中括号内的任意一个字母

[0-9] 匹配任何数字。类似于 [0123456789]

[a-z] 匹配任何小写字母

[A-Z] 匹配任何大写字母

[a-zA-Z0-9] 匹配任何字母及数字

[^aeiou] 除了aeiou字母以外的所有字符

[^0-9] 匹配除了数字外的字符

特殊字符类

实例 描述

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'

\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'