【问题标题】:Insert a line-break every n characters, reset n on line-break using Python [duplicate]每n个字符插入一个换行符,使用Python在换行符处重置n [重复]
【发布时间】:2019-08-22 09:29:31
【问题描述】:

我从 Jira REST-Api 获得了一段文本。我需要每 150 个字符插入一个换行符。

如果第 150 个字符不是空格,则在最后一个空格中插入换行符,如果该文本包含换行符,则该计数应重置。

我已经尝试使用正则表达式,但它会删除/忽略文本中已有的换行符,并在单词中间插入换行符

featureText = re.sub("(.{150})", "\\1\n", featureText, 0, re.DOTALL)
#featureText contains some text from the api get request

为简单起见,假设我想每 10 个字符添加一个换行符。我有文字

My Television is broken
and that sucks

我现在得到了

My Televis
ion is bro
ken and th
at sucks

我想要的是

My
Television
is broken
and that
sucks

编辑:澄清了我的问题,因为它是现实世界的失败者。 只有示例使用 10 个字符,我真正的问题使用 150 个字符,所以不要担心将一个单词切成两半,我想不会有任何 150 个字符长的单词。

【问题讨论】:

  • 不要使用正则表达式。只需使用循环和条件对其进行编码。
  • 你是对的。我把这个问题复杂化了,谢谢。
  • 我已经澄清了我的问题。

标签: python regex string count line-breaks


【解决方案1】:

我会像这样使用文本换行:

import textwrap

example = textwrap.dedent("""\
    My Television is broken
    and that sucks""")

print '\n'.join(l for line in example.splitlines() 
                  for l in textwrap.wrap(line, width=10))

这会导致:

My
Television
is broken
and that
sucks

一个更好的例子是:

example = textwrap.dedent("""\
    My Television is
    and that sucks""")

结果:

My
Television
is
and that
sucks

这更好地表明原始行是单独包装的。

【讨论】:

  • 这正是我所需要的!感谢您帮助 Python 初学者!
【解决方案2】:

类似:

def split_text(text, n):
    for line in text.splitlines():
        while len(line) > n:
           x, line = line[:n], line[n:]
           yield x
        yield line

text = "abcdefghijklmnopqr\nstuvwxyz"

for line in split_text(text, 10):
    print(line)

打印:

abcdefghij
klmnopqr
stuvwxyz

【讨论】:

  • 谢谢,工作正常,但我发现了一个新问题:它把单词减半。我将尝试改进您的想法,即仅在空格中插入换行符。
  • 我已经澄清了我的问题。
  • 啊,那么我想你只想要textwrap.fill @DanD 建议
  • Exact :) 抱歉,我的问题起初措辞不佳。感谢您的帮助!
猜你喜欢
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
相关资源
最近更新 更多