C#正则表达式替换不起作用

时间:2017-04-28 16:51:01

标签: c# regex

我正在尝试使用RegEx替换字符串,但没有任何内容被替换。我不确定我做错了什么。

System.Text.RegularExpressions.Regex regEx = null;

regEx = new System.Text.RegularExpressions.Regex("DefaultStyle.css?x=839ua9");
pageContent = regEx.Replace(htmlPageContent, "DefaultStyleSnap.css?x=742zh2");

htmlPageContent 是字符串类型,包含Render方法的html页面内容(在我们将其发送到浏览器之前写入)。 htmlPageContent字符串肯定包含“DefaultStyle.css?x = 839ua9”。当我在visual studio中进行Quick Watch时,以及当我查看Page Source时,我可以看到它。

为什么RegEx没有替换字符串?

2 个答案:

答案 0 :(得分:1)

您必须在\?中使用\.?代替.Regex。请查看以下代码。

CODE:

using System;

public class Program
{
    public static void Main()
    {
        string htmlPageContent = "Some HTML <br> DefaultStyle.css?x=839ua9";
        string pageContent = "";

        System.Text.RegularExpressions.Regex regEx = null;

        //regEx = new System.Text.RegularExpressions.Regex("DefaultStyle.css?x=839ua9");
        regEx = new System.Text.RegularExpressions.Regex(@"DefaultStyle\.css\?x=839ua9");
        pageContent = regEx.Replace(htmlPageContent, "DefaultStyleSnap.css?x=742zh2");

        Console.WriteLine(pageContent);
    }
}

输出:

Some HTML <br> DefaultStyleSnap.css?x=742zh2

您可以在DotNetFiddle中查看输出。

答案 1 :(得分:1)

您需要使用\转义特殊字符。

System.Text.RegularExpressions.Regex regEx = null;

regEx = new System.Text.RegularExpressions.Regex("DefaultStyle\.css\?x=839ua9");
pageContent = regEx.Replace(htmlPageContent, "DefaultStyleSnap.css?x=742zh2");

您需要显式转义?,这意味着前一个字符的0或更多。

至于.如果你没有逃避它,你将匹配任何字符。逃避它也是更精确的,以确保你不匹配像

这样的东西
DefaultStyle-css?x=839ua9