python如何匹配换行符

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 模式

直接匹配换行符本身

如果目标是**显式捕获换行符**,不用依赖点号,直接写转义序列即可:

  • \n 匹配 Unix/Linux/macOS 换行
  • \r\n 匹配 Windows 换行(最常见)
  • \r|\n|\r\n 或更稳妥地用 [\r\n]+ 匹配各种换行组合
  • 实际中推荐 re.split(r'[\r\n]+', text) 来安全切分行

注意 re.MULTILINE 的作用不同

re.MULTILINEre.M)只影响 ^$ 的行为,让它们分别匹配每行开头和结尾,不会. 匹配换行符。别混淆这两个标志。

基本上就这些 —— 看你要的是“跳过换行继续匹配”,还是“把换行符当目标提取”,选对标志或写法就行。