1. 简介
re模块是Python中用于正则表达式操作的标准库之一,它提供了一系列的函数用于使用正则表达式进行匹配、搜索、替换等常见操作。在日常的文本处理中,使用正则表达式可以大大提高处理效率,缩短代码量。
正则表达式是一种字符串的匹配规则,它以特定的字符表示字符串中的一类字符或字符串组合,并用于匹配、搜索等操作。
2. 正则表达式的语法规则
在使用re模块之前,我们需要了解一下正则表达式的基本语法规则:
2.1 基本元字符
正则表达式中有一些特殊的字符称为元字符,它们在表达式中表示一类特定的字符或字符组合:
.:表示任意单个字符;
[ ]:表示匹配括号内任意一个字符;
[^ ]:表示匹配不在括号内的任意一个字符;
*:表示匹配前一个字符任意次数(0次或多次);
+:表示匹配前一个字符至少一次;
?:表示匹配前一个字符0次或1次;
{m}:表示匹配前一个字符恰好m次;
{m,n}:表示匹配前一个字符最少m次,最多n次;
|:表示或者的意思,匹配两个表达式中的任意一个。
2.2 特殊字符
正则表达式中还有一些特殊的字符,它们有特定的含义:
\d:任意数字,等效于[0-9];
\D:任意非数字,等效于[^0-9];
\w:任意字母或数字或下划线,等效于[a-zA-Z0-9_];
\W:任意非字母或数字或下划线,等效于[^a-zA-Z0-9_];
\s:任意空白字符(空格、制表符、换行符等),等效于[\t\n\r\f\v];
\S:任意非空白字符,等效于[^\t\n\r\f\v]。
2.3 分组
通过使用括号,可以将多个字符组合成一个子表达式,并对这个子表达式进行分组。分组可以进行嵌套,并支持重复、或者、非等操作。例如:
(ab)+ #匹配连续出现的多个"ab"字符串
(a(bc))+ #匹配连续出现的多个"abc"字符串
(a\|b)+ #匹配连续出现的多个"a"或"b"字符
([0-9a-fA-F]{2}\:)+ #匹配MAC地址
3. re模块常用函数
3.1 re.compile()
re.compile()函数用于将正则表达式字符串编译为一个Pattern对象。由于在实际操作中,一个正则表达式可能需要多次使用,先编译为Pattern对象可以大大提高效率。例如:
import re
pattern = re.compile(r'\d{3}-\d{3,8}')
result = pattern.match('010-12345')
3.2 match()
match()函数用于尝试从字符串的起始位置匹配一个模式,成功返回一个Match对象,否则返回None。例如:
import re
pattern = re.compile(r'\d{3}-\d{3,8}')
result = pattern.match('010-12345')
3.3 search()
search()函数用于在整个字符串中搜索并匹配第一个满足条件的模式,成功返回一个Match对象,否则返回None。例如:
import re
pattern = re.compile(r'\d{3}-\d{3,8}')
result = pattern.search('010-12345')
3.4 findall()
findall()函数用于在整个字符串中搜索并匹配所有满足条件的模式,返回一个由所有匹配字符串组成的列表。例如:
import re
pattern = re.compile(r'\d{3}-\d{3,8}')
result = pattern.findall('010-12345,020-8888,13888888888')
3.5 finditer()
finditer()函数用于在整个字符串中搜索并匹配所有满足条件的模式,返回一个由所有匹配对象组成的迭代器。例如:
import re
pattern = re.compile(r'\d{3}-\d{3,8}')
result = pattern.finditer('010-12345,020-8888,13888888888')
for m in result:
print(m.group())
3.6 sub()
sub()函数用于在字符串中搜索并替换所有满足条件的模式。例如:
import re
pattern = re.compile(r'\d{3}-\d{3,8}')
result = pattern.sub('****', '010-12345,020-8888,13888888888')
print(result)
3.7 split()
split()函数用于根据正则表达式匹配结果对字符串进行切片,返回一个切片后的字符串组成的列表。例如:
import re
result = re.split(r'\s+', 'a b c')
print(result)
4. 实例演示
接下来,我们通过一些例子来演示re模块的具体应用。
4.1 匹配手机号码
手机号码是以11位数字开头的电话号码。我们可以通过正则表达式来匹配手机号码:
import re
pattern = re.compile(r'^1\d{10}$')
result = pattern.match('13888888888')
if result:
print('匹配成功')
else:
print('匹配失败')
4.2 匹配IP地址
IP地址由4个数字组成,每个数字的取值范围是0~255,数字之间用点号隔开。我们可以通过正则表达式来匹配IP地址:
import re
pattern = re.compile(r'^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
result = pattern.match('192.168.1.1')
if result:
print('匹配成功')
else:
print('匹配失败')
4.3 替换HTML标签
我们可以用sub()函数来替换HTML标签,将HTML文件中的标签去除。
import re
pattern = re.compile(r'<[^>]+>')
result = pattern.sub('', '
Test Hello World!')
print(result)
5. 总结
在本文中,我们介绍了Python中re模块的基本用法和常见函数用法,包括了正则表达式语法、编译正则表达式、匹配、搜索、替换、切片等内容,并通过实例演示了正则表达式在文本处理中的应用。使用正则表达式可以大大提高程序的效率和可读性,是Python中常用的文本处理方法之一。