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

Python中按空格分隔的多行字符串如何实现左对齐?

Python实现多行文本两列左对齐解决方案

错误原因分析

你之前的代码无法得到预期结果,核心问题是r'\1'是正则替换的占位符,只有在re.sub执行替换逻辑时才会被替换为实际匹配到的内容。你写的r'\1'.ljust(20) 是在re.sub调用前就预先计算的,此时计算的是字符串r'\1'本身的长度(仅为2),所以会补18个空格,最终导致第二列前空格过多。

解决方案

方案1:逐行拆分处理(可读性最高,推荐)

先拆分所有行,计算第一列单词的最大长度,再逐行格式化拼接,避免正则的匹配误差:

# 拆分文本为行,过滤空行
lines = [line.strip() for line in text.splitlines() if line.strip()]
# 计算第一列单词的最大长度
max_word_len = max(len(line.split()[0]) for line in lines)
# 逐行格式化
formatted = []
for line in lines:
    # maxsplit=1 避免释义部分本身包含空格导致拆分错误
    word, meaning = line.split(maxsplit=1)
    formatted.append(f"{word.ljust(max_word_len)} {meaning}")
# 输出结果
print("\n".join(formatted))

方案2:re.sub搭配回调函数实现

如果你需要用正则实现,可以给re.sub传入回调函数,每次匹配到内容后动态计算填充长度:

import re
# 先计算第一列单词最大长度
max_word_len = max(len(w) for w in re.findall(r'\n(\w+)\s', text))
# 回调函数处理每个匹配项
result = re.sub(
    r'\n(\w+)\s+(\w+)',
    lambda match: f"\n{match.group(1).ljust(max_word_len)} {match.group(2)}",
    text
)
print(result)

两种方案运行后都可以得到你预期的对齐效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:03