3

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

string Line = "1  2";

Regex.Split(Line, "  ");

=> 1, 2

我想添加一个例外。如本例所示,仅在“未被 [] 括起来”时才拆分。

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

Regex.Split(Line, "  ");

=> 1, 2, [1 2]

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

4

1 回答 1

2

您可以使用前瞻,它断言]在下一个开头[或字符串结尾之前没有关闭:

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

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

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

进一步阅读环视。

于 2012-11-16T15:48:42.513 回答