python:拆分字符串而不丢弃任何东西

时间:2017-02-23 15:59:55

标签: python regex string split

我想做这样的事情:

import re
s = 'This is a test'
re.split('(?<= )', s)

添加这样的东西:

['This ', 'is ', 'a ', 'test']

但这不起作用。

有人能建议一种基于正则表达式拆分字符串的简单方法(我的实际代码更复杂,需要正则表达式)而不丢弃任何内容吗?

5 个答案:

答案 0 :(得分:4)

re.split()的目的是定义要拆分的分隔符。虽然你会发现其他答案可以让你的案例有效,但我觉得你会更喜欢 re.findall()

re.findall(r'(\S+\s*)', s)

给你

['This ', 'is ', 'a ', 'test']

答案 1 :(得分:2)

您可以在此处使用regex模块。

import regex
s = 'This is a test'
print regex.split('(?<= )', s,flags=regex.VERSION1)

输出:

['This ', 'is ', 'a ', 'test']

import re
s = 'This is a test'
print [i for i in re.split(r'(\w+\s+)', s,) if i]

注意:0 width assertions are not supported in re module for split

答案 2 :(得分:1)

捕获分隔符,然后将分隔符重新加入上一个单词:

>>> it = iter(re.split('( )', s)+[''])
>>> [word+delimiter for word, delimiter in zip(it, it)]
['This ', 'is ', 'a ', 'test']

答案 3 :(得分:1)

为什么不使用re.findall

re.findall(r"(\w+\s*)", s)

答案 4 :(得分:0)

至少在字母字符和一个分割空间上:

[i for i in re.split('(\w+ +)',s) if i] # ['This ', 'is ', 'a ', 'test']