python中常用正则表达式总结:
1. 模式
\w : 匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
\W : 匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]
\d : 匹配一个数字, 相当于 [0-9]
\D : 匹配非数字,相当于 [^0-9]
\s : 匹配任意空白字符, 相当于 [ \t\n\r\f\v]
\S : 匹配非空白字符,相当于 [^ \t\n\r\f\v]
(..) : 分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照”(“的顺序决定索引值, 可以和后面的\number配合使用,也经常用在re.search()和re.match()返回的Match对象中
\number : 可以上面的(..)分组配合使用,比如
1
2
re.compile(r'(python)123\1')
\1就代表python这个字符串,需要记住的是,一般使用\number时,字符串最好加个r标识,否则\有可能会被误识别为是转义符
* : 匹配前一个元字符或模式0到多次
+ : 匹配前一个元字符或模式1到多次
? : 匹配前一个元字符或模式0或1次
{n, m} : 匹配次数
. : 匹配任意字符(不包含换行符)
2. 正则表达式匹配方法
-
re.findall()
返回的是列表
-
re.match()
从字符串的开头开始匹配,返回值是一个Match对象,可以使用groups(), group(0), group(1)等取值
-
re.search()
和match()类似,只不过它不是从字符串的头开始匹配,而是任意位置
-
re.sub()
re.sub()的高级用法如下:
1
2
3
4
5
def convert(value):
matched = value.group()
return '!!' + matched + '!!'
re.sub('java', convert, 'pythonjavapythonjava')
3. group()方法
1
group相关的方法有groups(), group(), group(1) ...
1
2
3
4
5
6
7
8
s = 'lifes is short, i use python'
r = re.match('life([a-z ]*)short.*(python)', s)
print(r.group())
print(r.group(0))
print(r.group(1))
print(r.group(2))
print(r.group(0, 1, 2))
print(r.groups())
1
group()和group(0)返回的都是整个正则表达式的结果,group()的参数从1开始,表示每个分组的结果. groups()表示返回所有的匹配的分结果, 上面返回结果是:
1
2
3
4
5
6
'life is short, i use python'
'life is short, i use python'
' is'
'python'
('life is short, i use python', ' is', 'python')
(' is', 'python')