我正在尝试使用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没有替换字符串?
答案 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