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

Perl与Python中带m标志的正则表达式行为差异及适配方案

Perl转Python正则替换问题:解决末尾多余的[stamp]

问题分析

Perl代码里的s/^/$stamp/gm会给每行开头添加[stamp],但原字符串"message\n"末尾的换行不会触发额外替换——Perl的m修饰符不会把字符串末尾换行后的空位置认定为新行开头。

而Python的re.M(多行模式)下,^会匹配所有换行符之后的位置,包括字符串末尾换行符后的空位置,这就导致结果多了一个[stamp]。

解决方案

修改正则表达式,用正向预查(?=.)只匹配后面有内容的行开头,排除空行:

import re
message = "message\n"
stamp = "[stamp]"
result = re.sub(re.compile("^(?=.)", re.M), stamp, message)
print(repr(result))  # 输出: '[stamp]message\n'

也可以直接传入模式字符串,不用预编译正则:

import re
result = re.sub("^(?=.)", "[stamp]", "message\n", flags=re.M)

这样就能和Perl代码的行为完全一致,仅给有内容的行开头添加标记,不会在末尾换行后的空位置额外生成[stamp]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:06:41