根据字符串的长度动态插入换行符的任何方法?



我从端点接收到一个长字符串中的一些数据,并且根据字符串的长度,我想在前端将其分成段落。

一个字符串可能是这样的:

"*1* No princípio Deus criou os céus e a terra.*2* Era a terra sem forma e vazia; trevas cobriam a face do abismo, e o Espírito de Deus se movia sobre a face das águas.*3* Disse Deus: "Haja luz", e houve luz.*4* Deus viu que a luz era boa, e separou a luz das trevas.*5* Deus chamou à luz dia, e às trevas chamou noite. Passaram-se a tarde e a manhã; esse foi o primeiro dia.*6* Depois disse Deus: "Haja entre as águas um firmamento que separe águas de águas".*7* Então Deus fez o firmamento e separou as águas que estavam embaixo do firmamento das que estavam por cima. E assim foi.*8* Ao firmamento Deus chamou céu. Passaram-se a tarde e a manhã; esse foi o segundo dia.*9* E disse Deus: "Ajuntem-se num só lugar as águas que estão debaixo do céu, e apareça a parte seca". E assim foi.*10* À parte seca Deus chamou terra, e chamou mares ao conjunto das águas. E Deus viu que ficou bom.*11* Então disse Deus: "Cubra-se a terra de vegetação: plantas que dêem sementes e árvores cujos frutos produzam sementes de acordo com as suas espécies". E assim foi.*12* A terra fez brotar a vegetação: plantas que dão sementes de acordo com as suas espécies, e árvores cujos frutos produzem sementes de acordo com as suas espécies. E Deus viu que ficou bom.*13* Passaram-se a tarde e a manhã; esse foi o terceiro dia.*14* Disse Deus: "Haja luminares no firmamento do céu para separar o dia da noite. Sirvam eles de sinais para marcar estações, dias e anos,*15* e sirvam de luminares no firmamento do céu para iluminar a terra". E assim foi.*16* Deus fez os dois grandes luminares: o maior para governar o dia e o menor para governar a noite; fez também as estrelas.*17* Deus os colocou no firmamento do céu para iluminar a terra,*18* governar o dia e a noite, e separar a luz das trevas. E Deus viu que ficou bom.*19* Passaram-se a tarde e a manhã; esse foi o quarto dia.*20* Disse também Deus: "Encham-se as águas de seres vivos, e sobre a terra voem aves sob o firmamento do céu".*21* Assim Deus criou os grandes animais aquáticos e os demais seres vivos que povoam as águas, de acordo com as suas espécies; e todas as aves, de acordo com as suas espécies. E Deus viu que ficou bom.*22* Então Deus os abençoou, dizendo: "Sejam férteis e multipliquem-se! Encham as águas dos mares! E multipliquem-se as aves na terra".*23* Passaram-se a tarde e a manhã; esse foi o quinto dia.*24* E disse Deus: "Produza a terra seres vivos de acordo com as suas espécies: rebanhos domésticos, animais selvagens e os demais seres vivos da terra, cada um de acordo com a sua espécie". E assim foi.*25* Deus fez os animais selvagens de acordo com as suas espécies, os rebanhos domésticos de acordo com as suas espécies, e os demais seres vivos da terra de acordo com as suas espécies. E Deus viu que ficou bom.*26* Então disse Deus: "Façamos o homem à nossa imagem, conforme a nossa semelhança. Domine ele sobre os peixes do mar, sobre as aves do céu, sobre os animais grandes de toda a terra e sobre todos os pequenos animais que se movem rente ao chão".*27* Criou Deus o homem à sua imagem, à imagem de Deus o criou; homem e mulher os criou.*28* Deus os abençoou, e lhes disse: "Sejam férteis e multipliquem-se! Encham e subjuguem a terra! Dominem sobre os peixes do mar, sobre as aves do céu e sobre todos os animais que se movem pela terra".*29* Disse Deus: "Eis que lhes dou todas as plantas que nascem em toda a terra e produzem sementes, e todas as árvores que dão frutos com sementes. Elas servirão de alimento para vocês.*30* E dou todos os vegetais como alimento a tudo o que tem em si fôlego de vida: a todos os grandes animais da terra, a todas as aves do céu e a todas as criaturas que se movem rente ao chão". E assim foi.*31* E Deus viu tudo o que havia feito, e tudo havia ficado muito bom. Passaram-se a tarde e a manhã; esse foi o sexto dia.",

而另一个字符串更短:

"*1* Assim foram concluídos os céus e a terra, e tudo o que neles há.*2* No sétimo dia Deus já havia concluído a obra que realizara, e nesse dia descansou.

显然,第二个字符串不需要任何分割,因为它只有两个"节"。(注意到*1**2*,但第一个是从*1*一直到*29*

不太确定我要的是哪种逻辑,但可能是

之类的东西对于每个*10*th部分,在整个字符串上均匀地添加一个换行符。

不太确定我要的是哪种逻辑

从内置模块textwrap中获取textwrap.fill功能。最基本的用法是提供文本并给出宽度,例如

import textwrap
text = "Some very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long text"
text_with_breaks = textwrap.fill(text, 50)
print(text_with_breaks)

输出
Some very very very very very very very very very
very very very very very very very very very very
very very very very very very very very very very
very very very long text

但是它也有很多你可以调整的选项,参见textwrap.TextWrapper文档。

一个好的开始可能是使用正则表达式。

下面的方法假设每个节以模式"*integer开始*";并且每个节不包含此模式作为内容。

import re

# your long string
string = ""
# regular expression
pattern = "(*d+* .+?)(?=*d+*|$)"
# using the regular expression to find all sections
sections = re.findall(pattern, string)
# now you can loop over all sections like
for section in sections:
pass
# and let the fronted handle the display

最新更新