.NET 正则表达式分组:从组中排除字符串

Posted

技术标签:

【中文标题】.NET 正则表达式分组:从组中排除字符串【英文标题】:.NET Regex Grouping: Exclude String from group 【发布时间】:2014-04-15 21:29:02 【问题描述】:

当我在 .NET 中使用正则表达式时

(.+) (c b|b)

我有一个像“somestring c b”这样的字符串,我总是在第一组中得到“somestring c”,在第二组中得到“b”。

我想在第一组中获得“somestring”,在第二组中获得“c b”。

有什么想法吗?

【问题讨论】:

【参考方案1】:
(.+?) (c b|b)

? 是惰性限定符,表示匹配满足整个正则表达式所需的最少字符数。

Here is a grid of them and more details

【讨论】:

【参考方案2】:

一个简单的解决方案是通过在加号后添加一个问号来使第一组不情愿,如下所示:

(.+?) (c b|b)

没有它,它就不会贪婪并匹配尽可能多的有效字符,在您的情况下,这意味着匹配第一组中的 c。

【讨论】:

【参考方案3】:

将您想要匹配的内容放在括号内,并将“或”符号放在可接受的匹配项之间。例如,这个 RegEx 应该可以解决问题:

(.+ b|b)

【讨论】:

【参考方案4】:

按照下面的方法做

(.+[^c]) (c b|b)

Demo

【讨论】:

以上是关于.NET 正则表达式分组:从组中排除字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式中 如何取出所有组中的值?

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

正则表达式有两个主要组。两个分组在一个主要组中。同一组级别订单不计算在哪里

python五十八课——正则表达式(分组)

.NET正则表达式基础入门

如何使用正则表达式验证捕获组中的最后一个字符