正则表达式 .net 拆分

Posted

技术标签:

【中文标题】正则表达式 .net 拆分【英文标题】:regex .net split 【发布时间】:2012-11-05 08:50:03 【问题描述】:

我可以根据 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 2 hello [how are] you 直觉告诉我这是一个超出正则表达式范围的问题 你会嵌套吗? 1 2 [1 2 [1 2]] 3 4 那会产生什么? 没有嵌套,我只期望数字。下面的答案看起来不错。 【参考方案1】:

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

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

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

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

Further reading on lookarounds.

【讨论】:

它似乎不起作用。这个正则表达式如何查找其他模式( 而不是 [])? @csetzkorn 它对我来说很好用。对于输入 1 2 <1 2>,请使用 @" (?![^\<\>]*\>)"。如果这不起作用,请让我知道究竟发生了什么,并尽可能显示一些代码。 只要@"(... 之间只有一个空格,我就可以工作 @garyh 示例输入有两个空格,这就是我在正则表达式中使用两个空格的原因(它适用于我的两个空格)。我刚刚意识到我的最后一条评论只包含一个空格。那是两个。但也许最好允许任意数字:@"[ ]+(?![^\[\]]*\])"@"[ ]+(?![^\<\>]*\>)" 谢谢它的工作。您忘记了空格 @" (?![^\]*\>)" => @" (?![^\]*\>)"。

以上是关于正则表达式 .net 拆分的主要内容,如果未能解决你的问题,请参考以下文章

url 上的正则表达式无法在没有 GET 参数的情况下拆分散列

C# 正则表达式拆分为 Java 模式拆分

使用正则表达式拆分数学表达式

通过正则表达式拆分字符串[重复]

正则表达式拆分 CSV

Javascript 不会使用正则表达式拆分