如何实现以下文本的左对齐?提前感谢!
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))