2009-04-08 62 views
11

编辑:任何人都可以帮助我的字符串正则表达式,如本?:如何用','拆分字符串,除非','在括号内使用Regex?

[Header 1], [Head,er 2], Header 3

,这样我可以分裂成大块像这样:

[Header 1]
[Head,er 2]
Header 3

我已经得到了这个:

(?<=,|^).*?(?=,|$) 

哪位能给我:这个问题的

[Header 1]
[Head
,er 2]
Header 3

+0

世界需要人类的CSV如何实现? – 2009-04-08 21:55:26

+0

这是一个功课题吗?因为我发现使用普通的旧操作更简单 - 基本上:每个char: :如果char是逗号而不是在括号内,则将当前字符串添加到列表 – 2009-04-08 22:11:02

回答

15

在这种情况下,在分隔符(逗号)上拆分比在符合记号(或块)上更容易。标识是分隔符的逗号需要一个相对简单的前瞻:

,(?=[^\]]*(?:\[|$)) 

每次找到一个逗号的时候,你的三件事情做一个的预计。如果首先找到方括号,逗号就在一对括号内,所以它不是分隔符。如果你找到一个左括号或行/字符串的末尾,它是一个分隔符。

1

难道不是这么简单吗?

(?<=,|^)(?:[^,]|\[[^[]*\])* 
+0

当我使用您的正则表达式时,我得到以下形式的开发工具:语法错误:无效正则表达式:/(?<=,| ^) (?:[^,] | \ [[^ [] * \])* /:无效组 – starbeamrainbowlabs 2013-01-04 18:47:27

2
(?<=,|^)\s*\[[^]]*\]\s*(?=,|$) 

使用[]分隔符,你的优势

6
\[.*?\] 

忘了逗号,你不关心他们。 :)

+0

好的答案,但他改变了你的问题... – dmckee 2009-04-08 22:46:51

1

您既可以使用正则表达式的值相匹配的括号内:

\[[^\]*]\] 

或者你用这个正则表达式分割托架列表(使用环视断言):

(?<=]|^)\s*,\s*(?=\[|$) 
相关问题