让我们假设我有一个很长的文本,我想用一个API来处理,它的允许字符数(N)是最大的。我想将该文本分割成两个或更多的文本,其长度小于N个字符,并且基于分隔符。我知道我可以用分隔符来分割,但是我想尽可能少的保留输出子文本的数量。
例如,假设我的文本是:
"Lorem ipsum dolor,odio salutandi id nam,ferri nostro te duo. Eum ex odio habeo qualisque,ne eos natum graeco. Autem voluptatum ex mea. Nulla putent reformidans cu pro .a recusabo pro .a sit ludus cu. cotidieque ex sea,nam no duis te.
完全的,错误的,错误的。可供选择的容量法、效率法、极谱法、精读法、精读法。请原谅我..。这是一个很好的例子。“
有550个字符长。假设N是250。我预计案文将以这样的方式分开:
完全的,错误的,错误的。可供选择的容量法、效率法、极谱法、精读法、精读法。“(232个字符)
你知道如何用Python来完成这个任务吗?
谢谢你的帮助。弗朗西丝卡
发布于 2022-03-05 17:12:52
您可以使用regex实现这一点:
import re
ouput = re.findall(r".{1,250}(?:\.|$)", data)
print(ouput).{1,250}:匹配1到250次之间的任何字符,尽可能多次。\.:匹配一个点。|:或$:匹配字符串的末尾。还可以将分隔符和最大长度放在变量中。
import re
num_max = 250
delimiter = re.escape('.')
ouput = re.findall(fr".{{1,{num_max}}}(?:{delimiter}|$)", data)
print(ouput)输出:
[
'Lorem ipsum dolor sit amet, odio salutandi id nam, ferri nostro te duo. Eum ex odio habeo qualisque, ne eos natum graeco. Autem voluptatum ex mea. Nulla putent reformidans cu pro, posse recusabo reprehendunt pro no. An sit ludus oblique.',
' Consulatu cotidieque ex sea, nam no duis prompta expetendis.',
'Est ne tempor quaestio complectitur, modo error vim et. Option voluptaria efficiantur te eam, ea appareat evertitur qui, te vix pertinax recteque. Mea eu diceret ceteros. Expetenda torquatos assueverit est ex, te reque voluptatibus signiferumque has.'
]发布于 2022-03-05 17:12:36
n = 250
text = """Lorem ipsum dolor sit amet, odio salutandi id nam, ferri nostro te duo. Eum ex odio habeo qualisque, ne eos natum graeco. Autem voluptatum ex mea. Nulla putent reformidans cu pro, posse recusabo reprehendunt pro no. An sit ludus oblique. Consulatu cotidieque ex sea, nam no duis prompta expetendis.
Est ne tempor quaestio complectitur, modo error vim et. Option voluptaria efficiantur te eam, ea appareat evertitur qui, te vix pertinax recteque. Mea eu diceret ceteros. Expetenda torquatos assueverit est ex, te reque voluptatibus signiferumque has."""
if len(text) >= 550:
print(text[0:n-1])
print(text[n:])
else:
print(text)因此,您可以有一个具有长度的变量n (在您的示例中为250个)。然后检查文本的长度是否大于或等于550个字符。如果是的话,它将打印从char,0到长度n的所有内容(减1,所以你得到的是前250个字符,而不是前251个字符)。然后,它将在第二部分做这个:从n到结尾。
发布于 2022-03-05 17:20:14
您可以创建一个函数,该函数可以返回所需长度的块。
In [13]: def split(N, text):
...: chunks = [text[i:i+N] for i in range(0, len(text), N-1)]
...: return chunks这将以列表的格式返回块。i.e
text = "Lorem.................." # complete lorem ispm
chunks = split(250, text)
print(len(s[0]), len(s[1]), len(s[2]))输出长度将是
250 250 50https://stackoverflow.com/questions/71364193
复制相似问题