拆分具有多个分隔符的python字符串

时间:2017-02-07 05:13:04

标签: python regex split

我想拆分一个python字符串line = '1 -1 2 3 -1 4',这样我的输出就是一个python列表['1','2','3','4']。我尝试了herehere的解决方案。然而,一些奇怪的输出即将来临。我的代码:

line = '1 -1 2 3 -1 4'
import re    
t=re.split("-1| ", line)

输出:

['1', '', '', '2', '3', '', '', '4']

任何帮助表示赞赏!

6 个答案:

答案 0 :(得分:4)

这是一个棘手的问题:)

re.split(r"(?:\s-1)?\s",line)
#['1', '2', '3', '4']

最快的解决方案(运行速度比正则表达式快4.5倍):

line.replace("-1 ", "").split()

答案 1 :(得分:1)

尝试:

t=re.split("\s+",line.replace("-1"," "))

答案 2 :(得分:0)

你也可以通过前瞻来试试这个:

print re.findall('(?<=[^-])\d+', ' ' +line)
# ['1', '2', '3', '4']

这更通用,因为这会过滤掉所有负数。

line = '-10 12 -10 20 3 -2 40 -5 5 -1 1' 
print re.findall('(?<=[^-\d])\d+', ' ' +line)
# ['12', '20', '3', '40', '5', '1']

答案 3 :(得分:0)

我没有使用正则表达式而是条件列表理解:

>>> line = '1 -1 2 3 -1 4'
>>> [substr for substr in line.split() if not substr.startswith('-')]
['1', '2', '3', '4']

答案 4 :(得分:0)

line.replace(' - 1','')。split('')

答案 5 :(得分:-1)

我不能说这是否比其他一些解决方案更有效,但列表理解是非常易读的,当然可以做到这一点:

line = '1 -1 2 3 -1 4'
t = [str(item) for item in line.split(" ") if int(item) >= 0]
>>> ['1', '2', '3', '4']