正则表达式.net拆分

时间:2012-11-16 15:42:18

标签: c# .net regex c#-4.0

我可以根据2个空格将字符串拆分为两个:

string Line = "1  2";

Regex.Split(Line, "  ");

=> 1,2,

我想添加一个例外。如果'未被[]括起,则仅拆分,如本例所示。

string Line = "1  2  [1  2]";

Regex.Split(Line, "  ");

=> 1,2,[1 2]

我可以通过正则表达式轻松实现这一目标吗?顺便说一句,我使用.NET。

1 个答案:

答案 0 :(得分:2)

您可以使用前瞻,断言在下一个开始]或字符串结尾之前没有结束[

Regex.Split(Line, @"[ ]+(?![^\[\]]*\])");

如果你有嵌套的[...]结构,这将失败你。请注意,前瞻不是实际匹配的一部分,它只是检查后面的内容而不消耗任何东西。在前瞻中,我使用[^\[\]]这是一个否定的字符类,匹配除了任何方括号之外的任何字符。

另请注意,这会在1个或多个空格上分割。如果您想要至少两个,请将[ ]+替换为[ ]{2,},如果您只想要两个[ ]{2}

Further reading on lookarounds.