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

时间:2014-12-08 17:12:44

标签: c# regex

我在这里有以下示例:

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

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

我的非捕获组中有DC =但它仍然包含DC =和

之间的文本

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

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

示例字符串:

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

任何帮助都会很棒。

我只想包括:我测试测试

谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

DEMO

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);

IDEONE

答案 1 :(得分:0)

非正则表达式解决方案如何:

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

答案 2 :(得分:0)

如果你想要返回true,如果DC =存在但没有捕获该值,你可以使用这段代码:

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

DEMO