C#Regex使用匹配值替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

答案

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

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

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

另一答案

你没有重新分配到HTML

所以:

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

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

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

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

这个怎么样?这样你就可以使用匹配中的值替换?

然而,最大的问题是你没有将替换的结果重新分配给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();
        
    

另一答案

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

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

以上是关于C#Regex使用匹配值替换的主要内容,如果未能解决你的问题,请参考以下文章

ruby 使用RegEx进行字符串提取 - 替换匹配

C# Regex.Replace 匹配相同数量的字符

RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +

正则表达式替换为c ++ 11中的回调?

正则表达式替换为c ++ 11中的回调?

PythonPycharm Regex matches