3

正規表現パターンのすべての出現箇所をカスタム文字列に置き換える関数をC#で作成しようとしています。一致文字列を使用して置換文字列を生成する必要があるため、Regex.Replace()を使用するのではなく、一致をループしようとしています。コードをデバッグすると、正規表現パターンはhtml文字列の一部と一致し、foreachループに入りますが、string.Replace関数は一致を置き換えません。何がこれを引き起こしているのか誰かが知っていますか?

私の関数の簡略化されたバージョン:-

public static string GetHTML() {
    string html = @"
        <h1>This is a Title</h1>
        @Html.Partial(""MyPartialView"")
    ";

    Regex ItemRegex = new Regex(@"@Html.Partial\(""[a-zA-Z]+""\)", RegexOptions.Compiled);
    foreach (Match ItemMatch in ItemRegex.Matches(html))
    {
        html.Replace(ItemMatch.Value, "<h2>My Partial View</h2>");
    }

    return html;
}
4

5 に答える 5

7

string.Replaceは文字列値を返します。これをhtml変数に割り当てる必要があります。また、一致した値のすべての出現箇所が置き換えられることにも注意してください。つまり、ループは必要ない可能性があります。

html = html.Replace(ItemMatch.Value, "<h2>My Partial View</h2>");

現在のインスタンスで指定された文字列のすべての出現箇所が別の指定された文字列に置き換えられた新しい文字列を返します。

于 2012-09-27T15:16:46.683 に答える
1

HTMLに再割り当てしていません

それで:

html = html.Replace(ItemMatch.Value, "<h2>My Partial View</h2>"); 
于 2012-09-27T15:18:26.023 に答える
0

これはどう?そうすれば、一致の値を使用して置き換えますか?

ただし、最大の問題は、置換の結果をhtml変数に再割り当てしていないことでした。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var html = @"
                            <h1>This is a Title</h1>
                            @Html.Partial(""MyPartialView"")
                        ";

            var itemRegex = new Regex(@"@Html.Partial\(""([a-zA-Z]+)""\)", RegexOptions.Compiled);
            html = itemRegex.Replace(html, "<h2>$1</h2>");

            Console.WriteLine(html);
            Console.ReadKey();
        }
    }
}
于 2012-09-27T15:21:46.893 に答える
0

他の回答が述べているように、あなたは結果の値を割り当てていません。

付け加えておきますが、foreachサイクルはあまり意味がなく、インライン置換を使用できます。

Regex ItemRegex = new Regex(@"@Html.Partial\(""[a-zA-Z]+""\)", RegexOptions.Compiled);
html = ItemRegex.Replace(html, "<h2>My Partial View</h2>");
于 2012-09-27T15:20:33.420 に答える
-2

とてもばかげている。文字列は変更できないので、再作成する必要があります。

html = html.Replace(ItemMatch.Value, "<h2>My Partial View</h2>");
于 2012-09-27T15:19:39.800 に答える