正则表达式!

正则表达式

语法

圆括号() 捕获组

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

匹配并捕获

1
2
3
4
5
6
7
8
9

\1 是对第一个捕获组(([a-zA-Z]))的引用。

它表示:匹配的内容必须和第一个捕获组中存储的字母完全相同。



\ 也可以用来引用捕获组的内容。在正则表达式中,捕获组用括号 () 定义,\1 表示第一个捕获组,\2 表示第二个,依此类推。

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

import re



# 匹配重复的字母

pattern = r"([a-zA-Z])\1"

string = "book"

result = re.search(pattern, string)

print(result) # 输出 <re.Match object; span=(1, 3), match='oo'> (表示连续重复的 "o")



# 匹配 ABAB 模式

pattern = r"(ab)\1"

string = "abab"

result = re.search(pattern, string)

print(result) # 输出 <re.Match object; span=(0, 4), match='abab'> (表示重复的 "ab")

匹配但不捕获

(?:abc):匹配但不捕获

命名捕获

1
2
3

(?P<name>abc):命名捕获组,匹配到的内容可以通过name引用

加号+

匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。例如,zo+ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

问号?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。

例如,do(es)? 可以匹配 “do” 、 “does”、 “doxy” 中的 “do” 和 “does”。? 等价于 {0,1}。

星号*

匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于 {0,}

\s

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

\S

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

中括号[ABC]

匹配 […] 中的所有字符

中括号[^ABC]

匹配除了 […] 中字符的所有字符

###中括号[A-Z]

[A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。

英文句号.

匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。

\w

匹配字母、数字、下划线。等价于 [A-Za-z0-9_]

\d

匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]

$

匹配输入字符串的结尾位置

^

匹配输入字符串的开始位置,除非在方括号表达式中使用

|

指明两项之间的一个选择

花括号

花括号{n}

n 是一个非负整数。匹配确定的 n 次。例如,o{2} 不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。

花括号{n,}

n 是一个非负整数。至少匹配n 次。例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*。

{n,m}

m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 “fooooood” 中的前三个 o。o{0,1} 等价于 o?

\n

匹配一个换行符

\b

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

1
2
3
4
5
6
7

good



\b 匹配的是g的左边和d的右边

1
2
3
4
5
6
7
8
9

Chapter title



\bCha:能成功匹配上面开头的三个字符

ter\b:能成功匹配上面Chapter结尾的三个字符

\B

非单词边界匹配

Chapter title

\BCha:不能匹配上面开头三个字符

\Ba
加载更多