regex没有给出所有可能的匹配项
本文关键字:有可能 regex | 更新日期: 2023-09-27 18:19:28
我需要获得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中无法获得重叠匹配。不过,你有几种方法可以解决这个问题。您可以使用Regex.Match
,并指定一个起始索引(使用循环遍历整个字符串),也可以使用lookbehinds或lookahead,如下所示:
(?=[^aeiou]a)[^aeiou]
这是因为lookbehinds和lookahead不使用字符。它返回一个包含匹配索引的Match
。您需要使用它而不是捕获,因为只捕获一个角色。