我有一个字符串和正在运行的正则表达式。但我不是第一场比赛,而是对正则表达式的最后一场比赛感兴趣。在正则表达式中查找最后一个匹配
有没有一种快速/简单的方法来做到这一点?
我目前使用Regex.Matches,它返回一个MatchCollection,但它不接受任何参数,这将帮助我,所以我必须通过集合并获取最后一个。但似乎应该有一个更简单的方法来做到这一点。在那儿?
我有一个字符串和正在运行的正则表达式。但我不是第一场比赛,而是对正则表达式的最后一场比赛感兴趣。在正则表达式中查找最后一个匹配
有没有一种快速/简单的方法来做到这一点?
我目前使用Regex.Matches,它返回一个MatchCollection,但它不接受任何参数,这将帮助我,所以我必须通过集合并获取最后一个。但似乎应该有一个更简单的方法来做到这一点。在那儿?
的.NET正则表达式的味道让你由右至左,而不是从左到右搜索匹配。这是我知道的唯一提供这种功能的味道。它比传统方法更清洁和更高效,比如在.*
前加上正则表达式,或者搜索所有匹配,以便可以取最后一个。
要使用它,当你调用Match()
(或其他正则表达式的方法),通过此选项:
RegexOptions.RightToLeft
更多信息,可以发现here。
您可以使用Linq
LastOrDefault
或Last
从MatchCollection
得到最后一个匹配项。
var lastMatch = Regex.Matches(input,"hello")
.OfType<Match>()
.LastOrDefault();
入住这Demo
或者,如@jdweng在评论中提及,你甚至可以使用访问索引。
Match lastMatch = matches[matches.Count - 1];
Regex regex = new Regex("REGEX");
var v = regex.Match("YOUR TEXT");
string s = v.Groups[v.Count - 1].ToString();
匹配匹配=匹配[matches.Count - 1]; – jdweng
使用[从右至左模式](https://msdn.microsoft.com/en-us/library/yd1hzczs(v = vs.110).aspx?cs-save-lang = 1&cs-lang = csharp#代码片断-18)。 –
@AlanMoore:谢谢,这很有用,而且正是我一直在寻找的。如果你想添加它作为答案,我会接受它。 –