假设我有一个这样的字符串,其中的项用逗号分隔,但在包含括号内容的项中也可能有逗号:
(EDIT:抱歉,忘记提及某些项目可能没有括号内的内容)
"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)"]
型
我想我必须使用一个正则表达式,可能是这样的:
([(]?)(.*?)([)]?)(,|$)
型
但我还在努力让它正常工作。
7条答案
按热度按时间3xiyfsfu1#
使用negative lookahead匹配所有不在括号内的逗号。根据匹配的逗号分割输入字符串将给予所需的输出。
字符串
DEMO的
型
ercv8c1e2#
您可以使用
str.replace
和str.split
来实现。您可以使用任何字符来替换),
。字符串
输出:-
型
w8f9ii693#
我相信我有一个更简单的正则表达式:
字符串
regexp的解释:
,
:)
结尾的字符列表,其中:,
和)
之间的字符列表不包含(
它在嵌套括号的情况下不起作用,如
a,b(c,d(e,f))
。如果需要这样做,一个可能的解决方案是通过split的结果,如果字符串有一个开括号而没有关闭,那么就进行merge:),如:型
n6lpvg4x4#
这个版本似乎可以使用嵌套的括号、方括号([]或<>)和大括号:
字符串
这样使用它:
型
我知道这可能不是最快的。
tyu7yeag5#
这里有两个较短的(更优雅?)版本,将处理嵌套括号。
发电机:
字符串
更实用的风格:
型
如果你不介意
more_itertools
,你可以从它导入locate
,并将第4行修改得稍微可读一些:st = list(locate(chain([0], starmap(int.__or__, zip(b, c)), [0]), (0).__eq__))
个0ve6wy6x6#
试试正则表达式
字符串
代码:
型
查看正则表达式如何工作http://regex101.com/r/pS9oV3/1
vd2z7a6w7#
使用
regex
,这可以通过findall
函数轻松完成。字符串
如果你想更好地理解正则表达式,请使用http://www.regexr.com/,这里是python文档的链接:https://docs.python.org/2/library/re.html的
编辑:我修改了正则表达式字符串以接受没有括号的内容:
\w[^,(]*(?:\(.*?\))?
个