[英]regex not giving all the possible matches
我需要获取给定正则表达式和c#中单词的所有可能匹配项。 但是Regex.Matches()函数没有提供它。 例如。
Regex.Matches("datamatics","[^aeiou]a[^aeiou]")
仅返回两个匹配项
dat
mat
它没有给出“ tam”作为匹配项。 有人可以向我解释为什么不给予“ tam”作为匹配,我怎么能得到这三个?
使用此正则表达式
(?<=([^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.Match
并指定起始索引(使用循环遍历整个字符串),也可以使用lookbehinds或lookaheads,如下所示:
(?=[^aeiou]a)[^aeiou]
之所以可行,是因为先行查找和先行查找不会占用字符。 它返回一个Match
,其中包含Match
的索引。 由于只捕获了一个字符,因此您需要使用它而不是捕获。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.