Python按空格分割字符串并保留空格的实现方案咨询
解决思路与方案
首先,咱们先理清楚问题的核心:你想要把字符串分割成原内容片段+分隔符交替出现的列表,但当前用re.split得到的结果只保留了内容片段,缺了中间的分隔符。结合你的需求和提到的细节,给你几个可行的方案:
1. 修正正则表达式,直接得到目标结果
如果你的原字符串a是用空格分隔的(比如"bla bla bla bla"),那问题出在你用了错误的正则匹配规则。想要在split时保留分隔符,只需要把分隔符放进捕获组里就行。试试这个:
import re a = "bla bla bla bla" v = re.split("(\s)", a) # 输出结果正好是 ['bla', ' ', 'bla', ' ', 'bla', ' ', 'bla']
这里(\s)表示捕获任意空白字符(如果你的分隔符是固定的空格,也可以写成( )),re.split遇到带捕获组的正则时,会把捕获到的分隔符也加入结果列表,完美符合你的期望。
2. 从现有结果反向生成目标列表
如果你已经拿到了只有bla的列表(比如v = ['bla', 'bla', 'bla', 'bla']),可以通过遍历插入空格的方式补充分隔符:
v = ['bla', 'bla', 'bla', 'bla'] result = [] for idx, item in enumerate(v): result.append(item) # 最后一个元素后不要加空格 if idx != len(v) - 1: result.append(' ') # 结果就是 ['bla', ' ', 'bla', ' ', 'bla', ' ', 'bla']
或者用更简洁的列表推导式写法:
result = [x for pair in zip(v, [' ']*len(v)) for x in pair][:-1]
原理是把每个bla和空格配对,展开后去掉最后多余的空格。
关于你提到的a[::2]
这个切片语法是取字符串a中索引为偶数的字符(比如"abcdef"[::2]会得到"ace"),其实和你的需求不相关,可能是你误解了某个方案的用法,不用纠结这个啦。
最后补充:如果你的原字符串里确实有[xxx]@这类分隔符,但当前正则没捕获到内容,那你需要检查原字符串的格式是否和正则匹配——比如如果分隔符是[ ]@(括号内是空格),那你的原正则"\[(.*?)\]@"应该能捕获到空格,split结果就会包含它。
内容的提问来源于stack exchange,提问作者Kazkuris
相关产品推荐
相关产品推荐

