我有一个列表,例如
a=['john(is,great),paul,school','robert,jack,john']
然后我正在构建一个空列表来附加拆分
b=[]
然后我这样做
for i in a:
b.append(i.split(','))
但是列表就像这样出现
[['john(is', 'great)', 'paul', 'school'], ['robert', 'jack', 'john']]
它这样做是因为它在逗号处分割但是有另一种方法来分割这个,所以这个john(is', 'great)
显示为一个字符串,如john(is,great)
答案 0 :(得分:6)
您可以使用list.extend()
分别添加元素:
for i in a:
b.extend(i.split(','))
要在逗号上的逗号上拆分文字,您可以使用以下正则表达式:
re.split(r',(?=[^()]*(?:\(|$))', i)
只有在下一个左括号之前没有包含任何括号(打开或关闭)的文本后,才会对逗号进行分割。当你有嵌套的括号时,这个表达式会下降,但适用于你的简单情况:
>>> import re
>>> i = 'john(is,great),paul,school'
>>> re.split(r',+(?=[^()]*(?:\(|$))', i)
['john(is,great)', 'paul', 'school']
对于更复杂的拆分,请使用完整的解析器。
答案 1 :(得分:1)
如果您不喜欢正则表达式,您还可以创建一个过程:
def splitter(s):
"""Splits a string s on commas, but only if the comma
is not surrounded by parentheses."""
if '(' in s and ')' in s:
start = s.find('(')
end = s.find(')')
new = s[start:end].replace(",", "@#$")
s = s[:start] + new + s[end:]
return [x.replace("@#$", ",") for x in s.split(",")]
return s.split(',')
example = ['john(is,great),paul,school','robert,jack,john']
result = list()
for i in example:
result.append(splitter(i))
print result
# [['john(is,great)', 'paul', 'school'], ['robert', 'jack', 'john']]