2016-08-24 15 views
1

私はそれに対して実行している文字列と正規表現を持っています。しかし、最初の試合の代わりに、私は正規表現の最後の試合に興味があります。正規表現で最後の一致を見つけよう

これを行う簡単な方法はありますか?

私は現在、MatchCollectionを返すRegex.Matchesを使用していますが、それは私を助けるパラメータを受け付けません。したがって、コレクションを通過して最後のものを取得する必要があります。しかし、これを行う簡単な方法があるはずです。ある?

+0

マッチマッチ=一致[マッチ。カウント - 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

MatchCollectionからの最後の一致を得るには、LinqLastOrDefaultまたはLastを使用できます。

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();