谢谢你的帮助.. 我有非常奇怪的情况,我有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中是否还有其他等效函数来解决我的问题?
答案 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']