我正在尝试对'NNTSY'进行正则表达式搜索,以便我可以获得两场比赛。
当我尝试使用模式?<NGrlyosylation>N[^P][ST][^P])"
进行匹配时,我只获得一个匹配,即NNTS
。
如何使用正则表达式匹配NNTSY
以便找到两个匹配项?
注意:背景信息:可以找到Rosalind问题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;
}
答案 0 :(得分:2)
在大多数编程语言中通常不允许查找重叠匹配(少数编程语言除外)。
所以,我不认为存在一种纯正的正则表达式来解决这个问题,但你可以在C#中使用Substring
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 强>