如何在多行文本字符串中实现左对齐,如果每行由空格分隔?



如何实现以下文本的左对齐?提前感谢!

text = """"
nword1 meanings
nword123 measings
nword12345 meanings
"""

预期:

text = """"
nword1     meanings
nword123   measings
nword12345 meanings
"""

我尝试使用re.sub然后使用ljust,但它不起作用。

In [58]: print(re.sub('(n[w]+s*)', r'1'.ljust(20), text))
"
word1                   meanings
word123                   measings
word12345                   meanings
# or print(re.sub('(n[w]+s*)', r'1'+' '*(20-len(r'1')), text))
# the result is same

例如,您可以计算从字符串开始的最长单词的长度,然后在每个单词后面的空格中添加不同的最大长度。

import re
text = """"
nword1     meanings
nword123         measings
nword12345        meanings
"""
maxLen = len(max(re.findall(r"^S+", text, re.M), key=len))
result = re.sub(r"(S+)[^Srn]+", lambda m: m.group(1) + ((maxLen + 1) - len(m.group(1))) * " ", text)
print(result)

输出
word1     meanings
word123   measings
word12345 meanings

Python演示


另一个选择是使用字符串格式化并动态地组合字符串格式。

maxLen = len(max(re.findall(r"^S+", text, re.M), key=len))
result = re.sub(r"(S+)[^Srn]+", lambda m: '{{:{}s}}'
.format(str(maxLen + 1))
.format(m.group(1)),
text)
print(result)

Python演示

例如:

import re
text = """
word1 meanings
word123 measings
word12345 meanings
"""
def repl(match): return match.group(1).ljust(10) + match.group(2)
text = re.sub(r'^(w+) +(w+)$', repl, text, flags=re.MULTILINE)
print(text)

你可以拆分行,左对齐第一个单词,右对齐第二个单词,如下图所示。

print(text.split()[1].ljust(20)+text.split()[2].rjust(20))

如果你有一个多行字符串,你可以像下面这样做,首先得到这些行,把单词分开,然后像下面一样左右对齐。

for strings in text.strip().split('n'):
if len(strings) > 1:
print(strings.split()[0].ljust(20) + strings.split()[1].rjust(20))

相关内容

  • 没有找到相关文章

最新更新