C#中正则表达式替换Regex.Replace如何将特殊字符当成普通字符处理

时间:2021-10-07 08:56:31
newName = Regex.Replace(newName,pattern, txtReplaceNew, RegexOptions.IgnoreCase);
这里pattern是由用户输入的,可能含有任意字符,包括正则表达式中的特殊字符,而我只想让它在Regex.Replace语句中以普通字符的形态进行匹配newName。需要如何处理?

例:
newName=“[www.cntingshu.com]百家讲坛_春秋五霸03_管仲相齐-李山.20110813”;
pattern=“[www.cntingshu.com]百家讲坛_”;

这里[].都是特殊字符,当然还有其它很多特殊字符。我无法知道用户要输入哪些字符,所以不可能手工加“/”来处理

10 个解决方案

#1


“”前面加个@

#2


pattern=textbox.text;
直接这样,貌似没什么问题

#3


pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");

#4


引用 3 楼 hjywyj 的回复:
pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

#5


引用 4 楼 ltolll 的回复:
Quote: 引用 3 楼 hjywyj 的回复:

pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

同求

#6


引用 4 楼 ltolll 的回复:
Quote: 引用 3 楼 hjywyj 的回复:

pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

这个是命名分组的意思
自己google下“正则表达式30分钟教程”

#7





public static string StringToPattern(string Str)
{
if(Str=="")
return "";

string[] c={"\\", "^", "$", "{", "[", ".", "(", "*", "+", "?", "!", "#", "|",")"};
for(int i=0;i<c.Length;i++)
{
Str=Str.Replace(c[i],"\\"+c[i]);
}
return Str;
}

#8


正则中有个Escape方法,直接可以将正则表达式中的转义字符当成普通字符匹配:
		string s = @"[www.\cntingshu.com]百家讲坛_";
string pattern = s;
bool result = Regex.IsMatch(s, Regex.Escape(pattern));
Response.Write(result);

//true

#9


引用 6 楼 devmiao 的回复:
Quote: 引用 4 楼 ltolll 的回复:

Quote: 引用 3 楼 hjywyj 的回复:

pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

这个是命名分组的意思
自己google下“正则表达式30分钟教程”

3q

#10


#3,#8都是有效的,谢谢。

#1


“”前面加个@

#2


pattern=textbox.text;
直接这样,貌似没什么问题

#3


pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");

#4


引用 3 楼 hjywyj 的回复:
pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

#5


引用 4 楼 ltolll 的回复:
Quote: 引用 3 楼 hjywyj 的回复:

pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

同求

#6


引用 4 楼 ltolll 的回复:
Quote: 引用 3 楼 hjywyj 的回复:

pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

这个是命名分组的意思
自己google下“正则表达式30分钟教程”

#7





public static string StringToPattern(string Str)
{
if(Str=="")
return "";

string[] c={"\\", "^", "$", "{", "[", ".", "(", "*", "+", "?", "!", "#", "|",")"};
for(int i=0;i<c.Length;i++)
{
Str=Str.Replace(c[i],"\\"+c[i]);
}
return Str;
}

#8


正则中有个Escape方法,直接可以将正则表达式中的转义字符当成普通字符匹配:
		string s = @"[www.\cntingshu.com]百家讲坛_";
string pattern = s;
bool result = Regex.IsMatch(s, Regex.Escape(pattern));
Response.Write(result);

//true

#9


引用 6 楼 devmiao 的回复:
Quote: 引用 4 楼 ltolll 的回复:

Quote: 引用 3 楼 hjywyj 的回复:

pattern=“[www.cntingshu.com]百家讲坛_”;
pattern=Regex.Replace(pattern,@"\[|\]|\.",@"\$0");


有效,能否讲一下"\$0"是什么意思?

这个是命名分组的意思
自己google下“正则表达式30分钟教程”

3q

#10


#3,#8都是有效的,谢谢。