2016-08-24 524 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(); 
相关问题