正则表达式

正则表达式

三月 23, 2019

正则表达式

^[0-9]+[A-Z]*[a-z]?adc$

正则表达式从左到右进行计算,并遵循优先级顺序

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

^ 为匹配输入字符串的开始位置。

[0-9]+匹配多个数字, [0-9] 匹配单个数字,+号代表前面的字符必须至少出现
一次(1次或多次)。

[A-Z]*匹配零个或多个大写字母 *号代表前面字符可以不出现,
也可以出现一次或者多次(0次、或1次、或多次)

[a-z]?匹配零个或最多1个小写字母 ?问号代表前面的字符最多只
可以出现一次(0次、或1次)

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

abc$匹配字母以 abc 结尾,$ 为匹配输入字符串的结束位置。

{n} n 是一个非负整数。匹配确定的 n 次。

{n,} n 是一个非负整数。至少匹配n 次。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

注意:*、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一
个?就可以实现非贪婪或最小匹配。

( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,
请使用 \( 和 \)。

. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。

[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。

\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。
要匹配 ^ 字符本身,请使用 \^。

{ 标记限定符表达式的开始。要匹配 {,请使用 \{。

| 指明两项之间的一个选择。要匹配 |,请使用 \|。

\cx 匹配由x指明的控制字符。

\f 匹配一个换页符。等价于 \x0c 和 \cL。

\n 匹配一个换行符。等价于 \x0a 和 \cJ。

\r 匹配一个回车符。等价于 \x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode
正则表达式会匹配全角空格符。

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

\t 匹配一个制表符。等价于 \x09 和 \cI。

\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

\b 匹配一个单词边界,即字与空格间的位置。
\B 非单词边界匹配。

Python re模块

re.match(pattern, string, flags=0)

1
2
3
4
5
6
7
8
9
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

1
2
group(num=0)    匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

re.search 扫描整个字符串并返回第一个成功的匹配。

1
2
3
4
5
6
7
8
9
10
11
re.search(pattern, string, flags=0)

pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配

re.sub用于替换字符串中的匹配项

1
2
3
4
5
6
7
re.sub(pattern, repl, string, count=0, flags=0)

参数:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

re.compile 函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,
供 match() 和 search() 这两个函数使用。

语法格式为:

re.compile(pattern[, flags])
参数:

pattern : 一个字符串形式的正则表达式

flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释