如何在将句子拆分为列表时保留白色 space?

How to keep the white space when splitting sentence to a list?

下面是拆分句子“s”的代码。

s = "1 a 3 bb  b8"
b = s.split()
print(b)

以上代码的输出是['1', 'a', '3', 'bb', 'b8']

所需的输出是 ['1', 'a', '3', 'bb', ' b8']。注意最后一个字段只有一个白色space

这是一个棘手的问题,很难使用通用函数,因此需要一些自定义代码。

我把 s = s = "1 a 3 bb b8" 和 b8 前的 3 个空格放在一起,让它更有趣:)

因此,您可以做的第一件事就是在拆分中明确指定限制器:

s.split(' ')

会给出以下结果:['1', 'a', '3', 'bb', '', '', 'b8']

现在您必须将 '' 解释为需要添加到下一个非空字符串的 ' '。在下面的 for 循环中,您将实施将空格放在预期位置的“业务规则”。

split_list = []
buffer = ''
for elt in temp_split:
    if elt != "":
        split_list.append(buffer + elt)
        buffer = ''
    else:
        buffer += ' '
print(split_list)

结果是:['1', 'a', '3', 'bb', ' b8']

该代码不是最好的,也不是很有效,但它可以工作。它潜水 spaces 作为字段分隔符和 spaces 作为数据,后者被特殊字符串替换(例如 $KEEP_THAT_SPACE$)。在下一步中,字符串被作为字段分隔符的 space 分割。那么所有元素中的所有特殊字符串都是 re-replaced 和空白。

#!/usr/bin/env python3
s = "1 a 3 bb  b8"

# assume that there are only two-character-spaces
keep_placeholder = '$KEEP_THAT_SPACE$'

s = s.replace('  ', f' {keep_placeholder}')

b = s.split()

for index, element in enumerate(b):  # <- iterat
    while keep_placeholder in element:
        element = element.replace(keep_placeholder, ' ')
        b[index] = element

print(b)

输出结果为['1', 'a', '3', 'bb', ' b8'],请注意最后一个字段的开头只有一个空格space。

如果您的字段有两个以上的空白 space,则可以轻松采用该代码。