我需要在 c# 中获取给定正则表达式和单词的所有可能匹配项。但是 Regex.Matches() 函数没有给出它。例如。
Regex.Matches("datamatics","[^aeiou]a[^aeiou]")
仅返回两个匹配项
dat
mat
它没有将“tam”作为匹配项。有人可以向我解释为什么它不给“tam”作为匹配项,我怎样才能得到这三个?
我需要在 c# 中获取给定正则表达式和单词的所有可能匹配项。但是 Regex.Matches() 函数没有给出它。例如。
Regex.Matches("datamatics","[^aeiou]a[^aeiou]")
仅返回两个匹配项
dat
mat
它没有将“tam”作为匹配项。有人可以向我解释为什么它不给“tam”作为匹配项,我怎样才能得到这三个?
使用这个正则表达式
(?<=([^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
}
您无法在正则表达式中获得重叠匹配。不过,您有几种方法可以解决它。您可以使用Regex.Match
, 并指定起始索引(使用循环遍历整个字符串),也可以使用后向或前瞻,如下所示:
(?=[^aeiou]a)[^aeiou]
这是有效的,因为后视和前瞻不会消耗字符。它返回一个Match
包含匹配索引的值。您需要使用它而不是捕获,因为只捕获了一个字符。