python3正则模块re的使用方法详解

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('', 'TestHello World!')

print(result)

5. 总结

在本文中,我们介绍了Python中re模块的基本用法和常见函数用法,包括了正则表达式语法、编译正则表达式、匹配、搜索、替换、切片等内容,并通过实例演示了正则表达式在文本处理中的应用。使用正则表达式可以大大提高程序的效率和可读性,是Python中常用的文本处理方法之一。

后端开发标签