2016-05-22 2 views
1

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

  • ННЦ
  • NTSY

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

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

ПРИМЕЧАНИЕ: Фоновая информация: проблема с розалиндой here.

Вот мой код.

 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

Вы пытаетесь найти совпадающие матчи – rock321987

+0

@ rock321987 Да. В точку. – Sung

+0

Для тех, кто хочет получить полный источник, проверьте источник здесь => https://github.com/dance2die/Demo.Rosalind/blob/master/Demo.Rosalind/Demo.Rosalind.Tests/MPRT/MprtTest.cs – Sung

ответ

2

Поиск совпадающих совпадений обычно не допускается на большинстве языков программирования (кроме немногих). Так что, я не думаю, что существует чисто регулярки способа решить эту проблему, но вы можете использовать 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

+0

Спасибо @ rock321987. Я не знал о концепции Regex 'lookahead', поэтому я потерялся. По крайней мере, те тесты, которые я создал, проходят все случаи, и я готов двигаться дальше. – Sung

+0

@Sung рад, это помогло ... 'lookaheads' равны нулю. Это означает, что они не потребляют никакого символа. Регулярное выражение будет проверяться на строку без согласованной строки, потребляемой – rock321987

+0

@Sung '.' не требовалось в регулярном выражении .. здесь будет достаточно простого обзора ..adding '.' немного ускорит процесс – rock321987

Смежные вопросы