2016-08-24 528 views
1

我有一個字符串和正在運行的正則表達式。但我不是第一場比賽,而是對正則表達式的最後一場比賽感興趣。在正則表達式中查找最後一個匹配

有沒有一種快速/簡單的方法來做到這一點?

我目前使用Regex.Matches,它返回一個MatchCollection,但它不接受任何參數,這將幫助我,所以我必須通過集合並獲取最後一個。但似乎應該有一個更簡單的方法來做到這一點。在那兒?

+0

匹配匹配=匹配[matches.Count - 1]; – jdweng

+1

使用[從右至左模式](https://msdn.microsoft.com/en-us/library/yd1hzczs(v = vs.110).aspx?cs-save-lang = 1&cs-lang = csharp#代碼片斷-18)。 –

+0

@AlanMoore:謝謝,這很有用,而且正是我一直在尋找的。如果你想添加它作爲答案,我會接受它。 –

回答

2

的.NET正則表達式的味道讓你由右至左,而不是從左到右搜索匹配。這是我知道的唯一提供這種功能的味道。它比傳統方法更清潔和更高效,比如在.*前加上正則表達式,或者搜索所有匹配,以便可以取最後一個。

要使用它,當你調用Match()(或其他正則表達式的方法),通過此選項:

RegexOptions.RightToLeft 

更多信息,可以發現here

0

您可以使用LinqLastOrDefaultLastMatchCollection得到最後一個匹配項。

var lastMatch = Regex.Matches(input,"hello") 
        .OfType<Match>() 
        .LastOrDefault(); 

入住這Demo

或者,如@jdweng在評論中提及,你甚至可以使用訪問索引。

Match lastMatch = matches[matches.Count - 1]; 
0
Regex regex = new Regex("REGEX"); 
var v = regex.Match("YOUR TEXT"); 
string s = v.Groups[v.Count - 1].ToString(); 
相關問題