正则表达式第二个非捕获组

本文关键字:第二个 正则表达式 | 更新日期: 2023-09-27 18:33:29

我这里有以下示例:

https://regex101.com/r/cE1sB4/3

基本上,我有一个非捕获正则表达式组。但是,我想扩展它,以便它不包含 DC= 之后的任何内容。

我的非捕获组中有 DC=,但它仍然包含 DC= 和 之间的文本 ,

这是我的正则表达式(我是新手!

(?:OU=|CN=|DC=)('w+[^,;])(?:,|$)

示例字符串:

CN=me,OU=test,OU=test,DC=donot,DC=includeme

任何帮助都会很棒。

只想包括:我测试测试

谢谢!

正则表达式第二个非捕获组

只需从非捕获组中删除DC=,然后打印组索引 1 即可获得所需的输出。

(?:OU=|CN=)('w+[^,;])(?:,|$)

演示

String input = @"CN=me,OU=test,OU=test,DC=donot,DC=includeme";
Regex rgx = new Regex(@"(?:OU=|CN=)('w+[^,;])(?:,|$)");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);

爱德酮

非正则表达式解决方案怎么样:

var input = "CN=me,OU=test,OU=test,DC=donot,DC=includeme";
var commaSplit = input.Split(',');
var keyValues = commaSplit.Select(x =>
{
    var equalsSplit = x.Split('=');
    return new KeyValuePair<string, string>(
        equalsSplit[0],
        equalsSplit[1]);
});
var notDcs = from kvp in keyValues
             where kvp.Key != "DC"
             select kvp.Value;
Console.WriteLine(String.Join(", ", notDcs)); // me, test, test

如果您希望在 DC= 存在但不捕获该值时返回 true,则可以使用以下代码:

(?:(?:OU|CN)=('w+[^,;])|(?:DC)=(?:'w+[^,;]))(?:,|$)

演示