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

Python多行字符串按行分割问题:含转义\n时分割错误

仅分割多行字符串的实际换行,保留内部转义\n的解决方案

当处理包含内部转义\n的多行字符串时,直接用splitlines()或split('\n')会错误地将字符串内部的\n也当作分割点,导致结果不符合预期。比如示例字符串:

s1 = """
x = 10
y = 20
print(f"Sample Calculator:\n{x} + {y} = {x+y}")"""

常规分割会把第三行拆成两行,我们需要保留字符串内部的\n,仅按原字符串的实际换行分割,得到目标输出:

------
x = 10
------
y = 20
------
print(f"Sample Calculator:\n{x} + {y} = {x+y}")

解决方案

核心逻辑是只分割不在引号内部的换行符——内部的\n处于字符串的引号范围内,不属于行分隔符。通过遍历字符串并跟踪引号状态实现:

def split_physical_lines(s):
    lines = []
    current_line = []
    in_quote = None  # None表示不在引号内,'或"表示处于对应引号范围
    for char in s:
        if char in ('"', "'"):
            # 处理引号:进入/退出引号状态
            if in_quote is None:
                in_quote = char
            elif in_quote == char:
                in_quote = None
        elif char == '\n' and in_quote is None:
            # 仅当不在引号内时分割行
            lines.append(''.join(current_line))
            current_line = []
        else:
            current_line.append(char)
    # 添加最后一行并过滤空行
    if current_line:
        lines.append(''.join(current_line))
    return [line for line in lines if line.strip() != '']

# 测试示例
s1 = """
x = 10
y = 20
print(f"Sample Calculator:\n{x} + {y} = {x+y}")"""
lines = split_physical_lines(s1)
for line in lines:
    print("------")
    print(line)

运行后会输出你期望的结果,字符串内部的\n被完整保留,仅按原多行字符串的实际换行分割。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:50:23