在列表中拆分String Python

时间:2014-04-22 12:20:34

标签: 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']]

它这样做是因为它在逗号处分割但是有另一种方法来分割这个,所以这个john(is', 'great)显示为一个字符串,如john(is,great)

2 个答案:

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