簡體   English   中英

正則表達式未給出所有可能的匹配項

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM