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
相关产品推荐
相关产品推荐

