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