如何在 python 中证明文本右对齐

How to justify text right alignment in python

我有一个有很多长度的虚拟文本。

sample_text = """Nunc tempus metus sem, at posuere nulla volutpat viverra. Sed nec nisl imperdiet, egestas ex et, sodales libero. Suspendisse egestas id dui at aliquet. Nulla a justo neque. Pellentesque non urna iaculis, maximus dolor at, pellentesque eros. Duis mi velit, ornare eu mollis sed, congue eget nisl. Ut suscipit, elit eu mattis vehicula, justo quam vulputate urna, nec tempor augue ligula sed nisl. Phasellus vel augue eu nibh sodales pretium ornare vel felis.Vivamus vitae suscipit orci. """

我正在寻找一种方法来证明 right 对齐等文本。浏览了 text wrap 文档,但仅保留默认值是合理的。

import textwrap
wrapper = textwrap.TextWrapper(width=50)
dedented_text = textwrap.dedent(text=sample_text)
print(wrapper.fill(text=dedented_text))

文本换行还提供许多功能,例如缩短器、缩进等

找到另一种方法来证明文本。

str.ljust(s, width[, fillchar])
str.rjust(s, width[, fillchar])
str.center(s, width[, fillchar])

但是上面的函数只在文本长度小于宽度时有效

是否有类似上述的功能或方法来证明文本?

简单的方法是:

import re
wrapper = textwrap.TextWrapper(width=50)
dedented_text = textwrap.dedent(text=sample_text)

txt = wrapper.fill(text=dedented_text)
def justify(txt:str, width:int) -> str:
    prev_txt = txt
    while((l:=width-len(txt))>0):
        txt = re.sub(r"(\s+)", r" ", txt, count=l)
        if(txt == prev_txt): break
    return txt.rjust(width)

for l in txt.splitlines():
    print(justify(l, 50))

几点注意事项:

(1) 对齐关注的行,而不是字符串中的行 - 因此您应该逐行对齐文本。没有批量方法 AFAIK。

(2) 你总是通过拉伸空间来证明 - 这只是你选择的空间以及你如何拉伸它们的电话 - 我发现网络上的所有示例仅在拉伸空间的方法方面有所不同他们使用...

输出:

Nunc  tempus  metus sem, at posuere nulla volutpat
viverra.  Sed  nec  nisl imperdiet, egestas ex et,
sodales  libero.  Suspendisse  egestas  id  dui at
aliquet.  Nulla  a  justo  neque. Pellentesque non
urna iaculis, maximus dolor at, pellentesque eros.
Duis  mi  velit, ornare eu mollis sed, congue eget
nisl.  Ut suscipit, elit eu mattis vehicula, justo
quam  vulputate  urna, nec tempor augue ligula sed
nisl.  Phasellus vel augue eu nibh sodales pretium
ornare  vel  felis.Vivamus  vitae  suscipit  orci.