You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用re.VERBOSE定义多行正则出现多余换行符的解决方法

问题根因

你写的多行正则出现多余\n是两个写法错误叠加导致的:

  1. Python三引号原始字符串(r'''...''')中,字符串内的换行会被直接保留为字面量\n字符,你在每行末尾额外加的反斜杠不会触发Python原生的字符串行拼接,反而会被当成字面量反斜杠存入字符串,最终就出现了你看到的\\n冗余内容。
  2. 你对re.VERBOSE的作用逻辑理解有偏差:该标志本身就会自动忽略正则中不在字符类([])内的所有空白字符(包括换行、空格、制表符),以及#开头的注释内容,不需要手动加反斜杠做行转义。
正确写法

直接按逻辑分段换行书写即可,不需要加任何行尾转义符,还可以搭配注释提升可读性:

import re

pat = re.compile(r'''
    (?P<host>(\d{1,3}\.){3}\d{1,3})  # 匹配IP格式的host字段
    ( - )                            # 匹配固定的" - "分隔段
    (?P<user_name>(\w+|-))           # 匹配用户名字段,支持-作为占位符
    .
''', re.VERBOSE)
注意事项
  • re.MULTILINE和多行书写正则完全无关:这个标志的作用是修改^/$的匹配规则,让它们可以匹配每一行的首尾,而非整个字符串的首尾,不需要为了多行写正则特意添加该标志。
  • 开启re.VERBOSE后如果需要匹配真实的空白字符(比如空格、换行),不能直接书写空白,要把空白放在字符类中(比如匹配空格写[ ]),或者使用转义形式(比如\ 、\n)。
  • 原始字符串前缀r只是让Python不解析字符串内的反斜杠转义,不会帮你忽略三引号内的换行,换行是否被当成正则有效内容,完全由re.VERBOSE标志处理。

内容的提问来源于stack exchange,提问作者sergiohzlz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:42:28