[英]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.