Python 使用逗号拆分列表中的字符串,同时使用括号

Python 使用逗号拆分列表中的字符串,同时使用括号,python,string,list,split,Python,String,List,Split,我有一个清单,例如 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']] 它这样做是因为它是在逗号处拆分的,但是有没有其他方法可以拆分它

我有一个清单,例如

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)', 'paul', 'school', 'robert', 'jack', 'john']

您可以使用
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']

对于更复杂的拆分,请使用成熟的解析器。

如果您不喜欢正则表达式,还可以创建一个过程:

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']]

你这里有两个问题;请一次只讨论一个问题。是的,但它仍然以逗号分隔,因此列表中的第一项是john(is,great)返回的字符串为2,而不是1string@user3527972:如我所说,您有两个独立的问题。:-)