私はそれに対して実行している文字列と正規表現を持っています。しかし、最初の試合の代わりに、私は正規表現の最後の試合に興味があります。正規表現で最後の一致を見つけよう
これを行う簡単な方法はありますか?
私は現在、MatchCollectionを返すRegex.Matchesを使用していますが、それは私を助けるパラメータを受け付けません。したがって、コレクションを通過して最後のものを取得する必要があります。しかし、これを行う簡単な方法があるはずです。ある?
私はそれに対して実行している文字列と正規表現を持っています。しかし、最初の試合の代わりに、私は正規表現の最後の試合に興味があります。正規表現で最後の一致を見つけよう
これを行う簡単な方法はありますか?
私は現在、MatchCollectionを返すRegex.Matchesを使用していますが、それは私を助けるパラメータを受け付けません。したがって、コレクションを通過して最後のものを取得する必要があります。しかし、これを行う簡単な方法があるはずです。ある?
.NETの正規表現の風味を使用すると、左の代わりに、右に、右から左への一致を検索することができます。私が知っている唯一の味で、そのような機能を提供しています。正規表現の先頭に.*
という接頭辞を付けたり、すべてのマッチを検索して最後のものを取るなど、従来の方法よりもクリーンで効率的です。
あなたはMatch()
(または他の正規表現のメソッド)を呼び出す場合は、このオプションを渡し、それを使用するには、次の
RegexOptions.RightToLeft
詳しい情報はhereを見つけることができます。
MatchCollection
からの最後の一致を得るには、Linq
LastOrDefault
またはLast
を使用できます。
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();
マッチマッチ=一致[マッチ。カウント - 1]; – jdweng
[右から左のモード](https://msdn.microsoft.com/en-us/library/yd1hzczs(v = vs.110).aspx?cs-save-lang = 1&cs-lang = csharp#コードスニペット-18)。 –
@AlanMoore:ありがとう、それはうまくいき、私が探していたものでした。それを回答として追加したい場合、私はそれを受け入れます。 –