正则表达式 .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 拆分的主要内容,如果未能解决你的问题,请参考以下文章