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