Python re模块核心函数详解:findall、sub、compile、match、search与split

橘子海
橘子海
发布时间:2026-10-15| 6人浏览过
原创

本文系统梳理Python中re模块的六大核心函数。详细解析findall用于提取所有匹配子串,sub实现字符串替换及自定义函数处理,compile用于预编译提升性能,match与search在匹配位置上的区别,以及split按正则分割字符串。涵盖语法、参数说明及实际代码示例,帮助开发者高效掌握正则处理技巧。

re.findall()函数用于在目标字符串中搜索所有符合正则表达式规则的子串,并将结果以列表形式返回。若未找到任何匹配项,则返回空列表。

该函数的主要功能是提取所有匹配内容,适用于需要获取全部匹配结果的场景。

其调用语法如下:

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

参数说明: pattern:定义匹配规则的正则表达式字符串。 string:需要被搜索的原始字符串。

具体应用示例如下:

场景设定:从一段混合文本中提取所有数字字符。


result = re.findall(r'\d+','1python2hello3')
print(result)

输出结果 ['1', '2', '3']


result = re.findall(r'p%','helloP%ython')
print(result)

输出结果 [] #由于目标字符串中的'P%'与正则表达式'p%'大小写不匹配,且未启用忽略大小写标志,因此返回空列表。


result = re.findall(r'p%','helloP%ython',re.I)
print(result)

输出结果 [P%]

re.sub()函数用于执行字符串替换操作。

其标准语法格式为:

re.sub(pattern, repl, string, count=0, flags=0)

参数详解: pattern :定义匹配规则的正则表达式。 repl :用于替换匹配内容的字符串,或者是一个处理匹配结果的函数。 string :原始待处理的字符串。 count :指定替换的最大次数,默认为0表示替换所有匹配项。


result = re.sub(r'python','world','hellopython')
print(result)

运行结果 helloworld

当参数设置为函数时,可实现更复杂的替换逻辑。


#需求:将匹配到结果中小于4的替换成8,大于4的替换成9
import re
def modify(value):
    matched = value.group()
    if int(matched) <= 4:
        return '8'
    else:
        return '9'
str = 'ab12cd34ef567'
result = re.sub('\d', modify, str)
print(result )

运行结果 ab88cd88ef999

适用场景:当需要对匹配成功的部分进行动态处理或复杂逻辑替换时,可通过传入函数实现。

re.compile()函数用于预编译正则表达式。

在Python中调用re模块处理正则时,内部流程通常包括:

  • 1)首先编译正则表达式,若表达式语法非法则抛出异常;
  • 2)使用编译后的对象进行字符串匹配。

因此,对于需要高频重复使用的正则表达式,预先编译生成Pattern对象可避免重复编译开销,从而显著提升执行效率。

compile函数负责将正则字符串编译为Pattern对象,该对象可被match()和search()等方法复用。

其语法结构为:

re.compile(pattern[, flags])

参数说明: pattern :表示正则表达式的字符串形式。 flags :可选参数,用于指定匹配模式(如忽略大小写、多行模式等)。


str = 'ab12cd34ef567'
info = re.compile(r'([a-z]{2})(\d{2})')
result = info.match(str).group()
result1 = info.match(str).groups() 
print(result)
print(result1)

运行结果 ab12 ('ab', '12')

re.match()函数尝试从字符串的起始位置进行匹配。若起始位置不符合正则规则,则返回None。

该函数的核心特性是仅从字符串开头尝试匹配,失败则返回None。

调用语法如下:

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

参数说明: pattern :匹配用的正则表达式。 string:待匹配的字符串。 flags :标志位,控制匹配行为(如大小写敏感、多行模式等)。


str = 'ab12cd34ef567'
info = re.compile(r'([a-z]{2})(\d{2})')
result = info.match(str).group()
result1 = info.match(str).groups() 
print(result)
print(result1)

运行结果 ab12 ('ab', '12')


str1 = '0b12cd34ef567'
result1 = info.match(str1).group()
print(result1)

异常结果:若匹配失败返回None,调用group()方法将引发报错 AttributeError: 'NoneType' object has no attribute 'group'

re.search()函数扫描整个字符串,并返回第一个成功的匹配对象。

与match不同,search会遍历整个字符串寻找首个匹配点。

参数说明: pattern :匹配用的正则表达式。 string:待匹配的字符串。 flags:标志位,控制匹配行为(如大小写敏感、多行模式等)。


str = 'ab12cd34ef567'
info = re.compile(r'([0-9]{2})')
result = info.search(str).group()
print(result)

运行结果 12

re.match与re.search的主要区别在于匹配范围。

re.match仅检查字符串起始位置,若开头不匹配则直接返回None;

re.search则扫描全字符串,直到找到第一个匹配项为止。

re.split()函数用于根据正则表达式的匹配子串将原字符串分割成列表。

split方法依据匹配到的子串作为分隔符,将字符串切分为列表返回。

其语法格式为:

re.split(pattern, string[, maxsplit=0, flags=0])

参数说明: pattern:匹配用的正则表达式。 string:待匹配的字符串。 flags:标志位,控制匹配行为(如大小写敏感、多行模式等)。


str = 'abc def g hi'
result = re.split('\W+',str)
print(result)

运行结果 ['abc', 'def', 'g', 'hi']

以上为Python中re模块常用方法的详细解析,更多相关技术内容请参阅本站其他文章。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。