Regex - совпадать несколько раз в строке

Я пытаюсь выполнить поиск по регулярному выражению 'NNTSY', чтобы получить два совпадения.

  • ННЦ
  • NTSY

Когда я попытался сопоставить, используя шаблон ?<NGrlyosylation>N[^P][ST][^P])"Я получаю только один матч, который NNTS,

Как я могу использовать Regex, чтобы соответствовать NNTSY так что два совпадения можно найти?

ПРИМЕЧАНИЕ. Справочная информация: проблему Розалинд можно найти здесь.

Вот мой код

        input = "NNTSY";
        Regex regex = new Regex("(?<NGrlyosylation>N[^P][ST][^P])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
        MatchCollection matches = regex.Matches(input);
        foreach (Match match in matches)
        {
            // Need to add 1 to because match index is 0 based
            const int offset = 1;
            yield return match.Index + offset;
        }

1 ответ

Решение

Нахождение совпадающих совпадений обычно не допускается в большинстве языков программирования (кроме немногих). Итак, я не думаю, что существует чистый способ регулярных выражений, чтобы решить эту проблему, но вы можете использовать Substring в C# с lookahead как

(?=N[^P][ST][^P]).

Код C#

string input = "NNTSY";
Regex regex = new Regex("(?=N[^P][ST][^P]).", RegexOptions.Compiled | RegexOptions.IgnoreCase);

Match match = regex.Match(input);

while (match.Success)
{
    Console.WriteLine(input.Substring(match.Index, 4));
    match = match.NextMatch();
}

Ideone Demo

Другие вопросы по тегам