如何使用正则表达式将','除非','括在字符串中?

时间:2009-04-08 21:53:49

标签: regex string

编辑:任何人都可以帮助我使用正则表达式来表示这样的字符串吗?:

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

这样我就可以把它分成几块:

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

我已经达到了这个目的:

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

哪会给我:

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

6 个答案:

答案 0 :(得分:16)

在这种情况下,分隔符(逗号)比匹配标记(或块)更容易。识别分隔符的逗号需要相对简单的预测:

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

每当你找到一个逗号时,你就会对三件事之一做一个预测。如果您首先找到一个结束方括号,则逗号位于一对括号内,因此它不是分隔符。如果您找到一个左括号或行/字符串的末尾,则它是一个分隔符。

答案 1 :(得分:6)

\[.*?\]

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

答案 2 :(得分:2)

之前已经讨论过这个问题的变化。

例如:

简短回答:正则表达式可能不是正确的工具。写一个合适的解析器。 FSM实现 easy

答案 3 :(得分:2)

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

使用[]分隔符为您带来优势

答案 4 :(得分:1)

这不是很简单吗?

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

答案 5 :(得分:1)

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

\[[^\]*]\]

或者您使用此正则表达式拆分括号列表(使用环视断言):

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