У меня есть следующий пример:
https://regex101.com/r/cE1sB4/3
В принципе, у меня есть группа, не захватывающая регулярные выражения. Тем не менее, я хочу расширить это, чтобы он не включал ничего после DC =.
У меня есть DC = в моей группе не захвата, но она по-прежнему включает текст между DC = и,
Вот мое регулярное выражение (я новичок в этом!)
(?:OU=|CN=|DC=)(\w+[^,;])(?:,|$)
Пример Строка:
CN=me,OU=test,OU=test,DC=donot,DC=includeme
Любая помощь будет большой.
Я просто хочу включить: test test
Благодарю!
Просто удалите 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);
Если вы хотите вернуть true, если DC = существует, но не фиксирует это значение, вы можете использовать этот код:
(?:(?:OU|CN)=(\w+[^,;])|(?:DC)=(?:\w+[^,;]))(?:,|$)
Как насчет решения без регулярных выражений:
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