5

文字列内の単一の(最後または最後から2番目の)一致を置き換えようとしています。私はすでに正規表現を持っていて、それは機能しますが、それはすべてのアイテムを置き換えます、そして私は戻って単一のアイテムを置き換える必要があります。

Regex.Replace(BaseString、MatchString、ReplacementString)

MatchEvaluatorを使用したいのですが、方法がわかりません。

何か助けはありますか?

4

3 に答える 3

13

MatchEvaluatorは単なるデリゲートです。関数を渡します。

あなたの場合、次のようなものを使用してください。

Regex.Replace(BaseString、MatchString、delegate(Match match)
                    {{
                        bool last = match.NextMatch()。Index == 0;

                        if(最後)
                            match.Valueを返します。
                        そうしないと
                            戻り値ReplacementString;
                    }、RegexOptions.Compiled);

このコードは最後の一致をスキップします。同様の方法で、最後から2番目の一致を確認することもできます。

MatchEvaluatorの使用方法の詳細については、この質問も参照してください:Regex.ReplaceのMatchEvaluatorはどのように機能しますか?

于 2010-12-30T22:50:29.320 に答える
4

これは、文字列の最後のオカレンスを置き換えるためのものです。

String testString = "It is a very good day isn't it or is it.Tell me?";
Console.WriteLine(Regex.Replace(testString, 
                  "(.*)(it)(.*)$", 
                  "$1THAT$3", 
                   RegexOptions.IgnoreCase));

最後から2番目を置き換えるタイミングを指定できれば、それを含めるように回答を編集できます。

于 2010-12-30T22:58:09.030 に答える
0

ループ内で検索し、最後の一致位置を保存してから、置き換えます

于 2010-12-30T22:49:35.987 に答える