2014-10-29 50 views
7

说我有这样的,在项目之间用逗号隔开,但也可能是项目中的逗号已括号内容的字符串:如何使用不在括号内的逗号分隔?

(编辑:对不起,忘了提,有些项目可能没有括号的内容)

"Water, Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" 

我怎样才能拆分字符串只有那些不在括号内的逗号?即:

["Water", "Titanium Dioxide (CI 77897)", "Black 2 (CI 77266)", "Iron Oxides (CI 77491, 77492, 77499)", "Ultramarines (CI 77007)"] 

我想我不得不使用正则表达式,或许是这样的:

([(]?)(.*?)([)]?)(,|$) 

,但我还在努力使其发挥作用。

+1

你能证明你至今尝试什么? – 2014-10-29 14:50:59

回答

10

使用negative lookahead来匹配不在括号内的所有逗号。根据匹配的逗号分割输入字符串将为您提供所需的输出。

,\s*(?![^()]*\)) 

DEMO

>>> import re 
>>> s = "Water, Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" 
>>> re.split(r',\s*(?![^()]*\))', s) 
['Water', 'Titanium Dioxide (CI 77897)', 'Black 2 (CI 77266)', 'Iron Oxides (CI 77491, 77492, 77499)', 'Ultramarines (CI 77007)'] 
0

尝试正则表达式

[^()]*\([^()]*\),? 

代码:

>>x="Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" 
>> re.findall("[^()]*\([^()]*\),?",x) 
['Titanium Dioxide (CI 77897),', ' Black 2 (CI 77266),', ' Iron Oxides (CI 77491, 77492, 77499),', ' Ultramarines (CI 77007)'] 

见正则表达式你可以做用str.replacestr.split它是如何工作http://regex101.com/r/pS9oV3/1

2

。 您可以使用任何字符替换),

a = "Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" 
a = a.replace('),', ')//').split('//') 
print a 

输出: -

['Titanium Dioxide (CI 77897)', ' Black 2 (CI 77266)', ' Iron Oxides (CI 77491, 77492, 77499)', ' Ultramarines (CI 77007)'] 
+0

串“水”在哪里? – 2014-10-29 15:23:56

+0

@AvinashRaj哦!我只是在我的字符串中错过了它。 – 2014-10-30 05:41:33

0

使用regex,这可以很容易地与findall函数来完成。

import re 
s = "Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" 
re.findall(r"\w.*?\(.*?\)", s) # returns what you want 

使用http://www.regexr.com/如果你想更好地了解正则表达式,这里是链接到Python文档:https://docs.python.org/2/library/re.html

编辑: 我修改了正则表达式的字符串接受没有括号内容:\w[^,(]*(?:\(.*?\))?