如何用不在括号内的逗号分隔?

2024-05-19 19:48:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个这样的字符串,其中的项用逗号分隔,但在带有括号内容的项中也可能有逗号:

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

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

我怎样才能只用那些不在括号内的逗号来分隔字符串呢?i、 e:

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

我想我得用正则表达式,可能是这样的:

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

但我仍在努力让它发挥作用。


Tags: 项目字符串ci编辑内容括号titaniumblack
3条回答

您可以使用str.replacestr.split来完成它。 您可以使用任何字符替换),

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

试试正则表达式

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

代码:

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

查看regex如何工作http://regex101.com/r/pS9oV3/1

使用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)']

相关问题 更多 >