Python中点号默认不匹配换行符,需用re.DOTALL(re.S)使其匹配;显式匹配换行符应直接使用\n、\r\n或[\r\n]+;re.MULTILINE仅影响^和$的行首行尾匹配行为。

Python 中匹配换行符,关键在于理解正则表达式默认行为和如何启用多行模式。
默认情况下点号(.)不匹配换行符
正则中的 . 默认只匹配除换行符(\n、\r、\r\n)以外的任意字符。所以像 re.search(r'a.b', 'a\nb') 会返回 None。
用 re.DOTALL 让点号匹配换行符
加上 re.DOTALL 标志(或简写 re.S),就能让 . 匹配包括换行符在内的所有字符:
-
re.search(r'a.b', 'a\nb', re.DOTALL)→ 匹配成功 -
re.findall(r'a.b', 'a\nb\nc\nd', re.S)→ 可跨行匹配连续的 a?b 模式
直接匹配换行符本身
如果目标是**显式捕获换行符**,不用依赖点号,直接写转义序列即可:
立即学习“Python免费学习笔记(深入)”;
-
\n匹配 Unix/Linux/macOS 换行 -
\r\n匹配 Windows 换行(最常见) -
\r|\n|\r\n或更稳妥地用[\r\n]+匹配各种换行组合 - 实际中推荐
re.split(r'[\r\n]+', text)来安全切分行
注意 re.MULTILINE 的作用不同
re.MULTILINE(re.M)只影响 ^ 和 $ 的行为,让它们分别匹配每行开头和结尾,不会让 . 匹配换行符。别混淆这两个标志。
基本上就这些 —— 看你要的是“跳过换行继续匹配”,还是“把换行符当目标提取”,选对标志或写法就行。










