regex没有给出所有可能的匹配项

本文关键字:有可能 regex | 更新日期: 2023-09-27 18:19:28

我需要获得c#中给定正则表达式和单词的所有可能匹配项。但是Regex.Matches()函数并没有给出它。例如

Regex.Matches("datamatics","[^aeiou]a[^aeiou]")

只返回两个匹配项

dat
mat

它并没有把"tam"作为匹配项。有人能向我解释一下为什么不把"tam"作为一场比赛,我怎么能把这三个都拿出来?

regex没有给出所有可能的匹配项

使用此正则表达式

(?<=([^aeiou]))a(?=([^aeiou]))

.net支持查找中的组捕获。。欢呼

你的代码是

var lst= Regex.Matches(input,regex)
              .Cast<Match>()
              .Select(x=>x.Groups[1].Value+"a"+x.Groups[2].Value)
              .ToList();

现在您可以在lst 上进行迭代

foreach(String s in lst)
{
     s;//required strings
}

在Regex中无法获得重叠匹配。不过,你有几种方法可以解决这个问题。您可以使用Regex.Match,并指定一个起始索引(使用循环遍历整个字符串),也可以使用lookbehinds或lookahead,如下所示:

  (?=[^aeiou]a)[^aeiou]

这是因为lookbehinds和lookahead不使用字符。它返回一个包含匹配索引的Match。您需要使用它而不是捕获,因为只捕获一个角色。