2014-04-22 111 views
2

我有一個列表,如分割字符串的Python列表

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

你這裏有** 2點**的問題;請一次保留一個問題。 –

回答

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

對於更復雜的分割,利用全面的解析。

+0

是的,但它仍然在逗號分開,所以第一個項目是在列表中,這是約翰(是,偉大)返回爲2個字符串,而不是1字符串 – user3527972

+0

@ user3527972:正如我所說,你有2個單獨的問題。 :-) –

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