Regex Вторая группа без захвата?

1

У меня есть следующий пример:

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

Благодарю!

  • 1
    «У меня есть следующий пример» - вы должны включить свой код в свой вопрос.
  • 0
    Каков ваш ожидаемый результат?
Показать ещё 2 комментария
Теги:

3 ответа

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

  • 0
    Извините, это была опечатка. Не хотел включать это!
  • 0
    попробуй.........
Показать ещё 2 комментария
0

Если вы хотите вернуть true, если DC = существует, но не фиксирует это значение, вы можете использовать этот код:

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

DEMO

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню