如何在指定字符(字符集)处按指定长度分割字符串

1 投票
2 回答
1475 浏览
提问于 2025-04-16 20:43

我觉得这个问题应该有人问过。

问题是,我想把一个字符串分开,用一些特定的字符作为分隔符,但我还希望每个子字符串的长度接近我指定的长度。


举个现实中的例子——分割长的字幕行。

比如说:

1234,asd dsa qwerty 567,

我想把这一行分成几行,最大长度设为10,但我不想把单词“拆开”。所以,这样分割后应该变成:

1234,asd
dsa qwerty 
567, 

当然,我可以先用分隔符把行分开,然后再把它们拼起来,直到达到想要的长度,但这样做会非常慢。

我考虑过用 str.find (然后用返回的位置),但这在处理正则表达式时行不通,因为分隔符有很多种——比如 .,;\n 等等。

我想到了 re.findall,但我想不出合适的正则表达式。我在想类似这样的东西:

(.*){, max_len}\s

re.S,但显然这样不行。应该有一些巧妙的方法……

2 个回答

3

这段代码是用来处理一些数据的。它的主要功能是从一个地方获取信息,然后对这些信息进行一些操作,最后再把结果输出。具体来说,它可能会涉及到循环、条件判断等基本的编程概念。

在编程中,我们常常需要从不同的地方获取数据,比如从文件、数据库或者网络上。获取到数据后,我们会对这些数据进行分析或者处理,比如筛选出我们需要的信息,或者进行一些计算。

最后,处理完的数据会被输出,可能是显示在屏幕上,或者保存到文件中,方便我们后续使用。

总之,这段代码的核心就是获取、处理和输出数据,虽然具体的实现细节可能比较复杂,但理解这个流程是很重要的。

In [1]: import textwrap

In [2]: textwrap.wrap('1234,asd dsa qwerty 567,', 10)
Out[2]: ['1234,asd', 'dsa qwerty', '567,']
1

下面的代码可以按照你想要的方式,在每个空格处把字符串分开,每段的宽度是10个字符:

import re
r = "1234,asd dsa qwerty 567,"
p = re.compile("(.{,10})($|\s)")
r = p.sub("\\1\n", r)

在这种情况下,输出结果是

1234,asd
dsa qwerty
567,

如果把宽度设置为5,你会得到

1234,asd
dsa
qwerty
567,

你可以看到,使用这种方法,单词是不会被拆开的。

如果你想用其他分隔符,只需要把"\s"替换成你想要的正则表达式就可以了。

撰写回答