Python正则表达式中re.S标志的作用与跨行匹配详解

青禾
青禾
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析Python正则表达式中re.S标志的作用。默认情况下,点号(.)不匹配换行符\n,导致无法跨行匹配。通过引入re.S(DOTALL)标志,可使点号匹配包括换行符在内的所有字符,从而实现跨行字符串的整体匹配。文章结合代码示例与官方文档说明,阐述其具体用法及效果。

Python 正则表达式

正则表达式是一种特殊的字符序列,用于便捷地检查字符串是否符合特定模式。自 Python 1.5 版本起,引入了 re 模块,该模块提供了 Perl 风格的正则表达式模式,使 Python 语言具备了完整的正则表达式处理能力。compile 函数可根据模式字符串及可选的标志参数生成正则表达式对象,该对象包含用于匹配和替换的一系列方法。

re 模块同时提供了与上述对象方法功能完全一致的独立函数,这些函数以模式字符串作为第一个参数进行调用。

本章节重点介绍 Python 正则表达式中 re.S 标志的具体作用,详细内容如下。

在 Python 的正则表达式中,存在一个名为 re.S 的参数。该参数表示点号(.,不包含外侧双引号)的作用范围扩展至整个字符串,包括换行符“\n”。参考以下代码示例:

 import re
a = '''asdfsafhellopass:
 234455
 worldafdsf
 '''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c

运行结果如下所示:

b is [] c is ['pass:\n\t234455\n\t']

在正则表达式中,点号(.)默认用于匹配除“\n”以外的任何字符,即仅在一行内进行匹配。这里的“行”以“\n”为分隔符。在示例字符串 a 中,每行末尾均存在一个不可见的“\n”。

若不使用 re.S 参数,匹配操作仅在每一行内独立进行;若当前行未匹配成功,则换至下一行重新开始,不会跨行处理。而使用 re.S 参数后,正则表达式会将整个字符串视为一个整体,将“\n”视为普通字符纳入其中,从而在整个字符串范围内进行匹配。

在 re.py 库的介绍文档中,包含以下相关说明:

“.” Matches any character except a newline. S DOTALL “.” matches any character at all, including the newline.

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

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 算法库。