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