2012-09-06 132 views
1

输入是以逗号分隔的字段列表。解析逗号不被括号包围

这里是一个例子。

tna,performance,ma[performance,3],price 

问题是某些“字段”的参数在方括号中指定,而且这些参数也有逗号。

只有当它们位于括号之外时,我可以使用什么正则表达式来打破逗号中的字符串。我想最终的结果是

tna 
performance 
ma[performance,3] 
price 
+0

只是一个想法:方括号是正则表达式中的特殊字符。如果在处理前将方括号转换为尖括号,则在处理后将其转换回方括号(如果需要),则您的正则表达式将更易于阅读和维护。然而,会有性能问题。 – JDB

+0

可能重复的[如何拆分字符串','除非','是使用正则表达式括号内?](http://stackoverflow.com/questions/732029/how-to-split-string-by-unless-is -within-brackets-using-regex) – tripleee

回答

3

这是你所需要的

(?<!\[[\w,]*?), 

如果括号是嵌套的括号内,利用这一点,因为上面会失败在这种情况下..

(?<!\[[\w,]*?),(?![\w,]*?\]) 

作品here

+1

尽管如此,很少有语言支持'*'和'+'。 –

+0

@BartKiers但它的工作.net .. :) – Anirudha

+0

是的,.NET支持它。我相信Perl也是,但只有在更新版本的Perl中,如果我没有弄错的话。啊,等等,我刚刚看到使用.NET提到的OP。 –

1

试试这个:

"[a-z0-9]*(\\[[a-z0-9\\[\\],]+\\])*" 
+0

关闭。零次或多次匹配会在Match集合中为您提供大量空的结果,并且字符类可以匹配任何地方(包括括号内)。试试这个:'(?<=^|,)[a-z] +(\ [[^ \ [\]] + \])*' – JDB