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

