C#Regex使用匹配值替换

时间:2012-09-27 15:15:30

标签: c# regex

我正在尝试用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;
}

5 个答案:

答案 0 :(得分:6)

string.Replace返回一个字符串值。您需要将此分配给您的html变量。请注意,它还会替换匹配值的所有匹配项,这意味着您可能不需要循环。

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

返回一个新字符串,其中所有出现的指定字符串都在其中   当前实例将替换为另一个指定的字符串。

答案 1 :(得分:1)

您没有重新分配到html

这样:

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

答案 2 :(得分:0)

正如其他答案所述,您没有分配结果值。

我想补充一点,你的foreach周期没有多大意义,你可以使用内联替换:

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

答案 3 :(得分: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();
        }
    }
}

答案 4 :(得分:-2)

感觉很傻。字符串是不可变的,所以我需要重新创建它。

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