我想拆分一个python字符串line = '1 -1 2 3 -1 4'
,这样我的输出就是一个python列表['1','2','3','4']
。我尝试了here和here的解决方案。然而,一些奇怪的输出即将来临。我的代码:
line = '1 -1 2 3 -1 4'
import re
t=re.split("-1| ", line)
输出:
['1', '', '', '2', '3', '', '', '4']
任何帮助表示赞赏!
答案 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']