在分隔符上拆分字符串,同时忽略子字符串

时间:2017-10-03 00:20:43

标签: python string split

谢谢你的帮助.. 我有非常奇怪的情况,我有python中的字符串列表。 当我基于(,)分割时,我希望'split'忽略子串。

前:

string = "'test_1[off,on]hello', 200, 300"
#check 'test_1[off,on]hello' is a substring 
print string.split(',')

实际操作:

['test_1[off', 'on]hello', '200', '300']

预期的操作:

['test_1[off,on]hello', '200', '300']

我们可以明确要求拆分而不担心子串吗? 或者在Python中是否还有其他等效函数来解决我的问题?

3 个答案:

答案 0 :(得分:1)

您的代码输出实际上是

["'test_1[off", "on]hello'", ' 200', ' 300']

(注意200和300之前的空格。)

您可以在此处利用此空间:

string = "'test_1[off,on]hello', 200, 300"
print string.split(', ')

给出

["'test_1[off,on]hello'", '200', '300']

对于更一般的情况,我担心你不能告诉split"忽略"一个子串(至少我不知道它)。但你可以做一些简单的后期处理,或使用正则表达式...

答案 1 :(得分:0)

我会在这里推荐正则表达式re.split,它对模式更加灵活。

>>> import re
>>> re.split(r',\s*(?!.*?])', string)
["'test_1[off,on]hello'", '200', '300']

<强>详情

,       # comma
\s*     # whitespace (any number of chars)
(?!     # negative lookahead
.*?     # anything
]       # closing brace
)     

该模式不会拆分位于[...]内的逗号。

答案 2 :(得分:0)

一个想法是:

my_string = "'test_1[off,on]hello', 200, 300"
my_substring = "'test_1[off,on]hello'"
temp = [s.split(',') for s in my_string.split(my_substring)] # Here you get a list of lists  [[''], ['', ' 200', ' 300']]
res = [s for l in temp for s in l + [my_substring ] if s][:-1] # we concat them, ignore the empty string generated by the split and add my_substring again
print res 
>> ["'test_1[off,on]hello'", ' 200', ' 300']