鉴于:

s = 'foo, bar, baz, qudz'


我想给定2条条件来拆分此字符串:


字符数n(在这种情况下,我将使用n = 10)
分隔符:“,”(第n个字符之前)


所需结果:

['foo, bar', 'baz, qudz']


我知道我可以很容易地用定界符分割它:

s.split(', ')
['foo', 'bar', 'baz', 'qudz']


我也知道我可以将它分成n个这样的大块:

[s[i:i+n] for i in range(0, len(s), n)]


我还看到了可以在第n个定界符here处分割的地方。

最佳答案

您可以使用functools.reduce完成此操作。

import functools


def splitter(s, n):
    def helper(acc, v):
        tmp1 = acc[-1]
        tmp2 = len(tmp1)
        if tmp2 >= n or tmp2 + len(v) >= n:
            acc.append(v)
        else:
            acc[-1] = tmp1 + ',' + v

        return acc

    tmp1 = s.split(',')
    if len(tmp1) == 1:
        return tmp1

    return list(functools.reduce(helper, tmp1[1:], [tmp1[0]]))

关于python - 如何按字符数和定界符将字符串拆分成块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60218815/

10-13 00:57