0

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

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

仅返回两个匹配项

dat
mat

它没有将“tam”作为匹配项。有人可以向我解释为什么它不给“tam”作为匹配项,我怎样才能得到这三个?

4

2 回答 2

1

使用这个正则表达式

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

.net 在lookarounds..cheers 中支持组捕获

你的代码是

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
}
于 2013-06-20T17:43:01.400 回答
0

您无法在正则表达式中获得重叠匹配。不过,您有几种方法可以解决它。您可以使用Regex.Match, 并指定起始索引(使用循环遍历整个字符串),也可以使用后向或前瞻,如下所示:

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

这是有效的,因为后视和前瞻不会消耗字符。它返回一个Match包含匹配索引的值。您需要使用它而不是捕获,因为只捕获了一个字符。

于 2013-06-20T17:43:21.177 回答