C# 正则表达式特殊字符
代码用C#表示。 如果我在regex简单字符串中使用代码(例如fileName=“Test”),但是如果我使用特殊字符((()[]{}!),则会出现问题C# 正则表达式特殊字符,c#,regex,C#,Regex,代码用C#表示。 如果我在regex简单字符串中使用代码(例如fileName=“Test”),但是如果我使用特殊字符((()[]{}!),则会出现问题 fileName = "Test- ( ) [ ] {} ! . , ` ~ @ # % ; = - + &"; string pattern = ".*" + fileName + @"_\d{2}_\d{2}_\d{2}.xml"; //pattert = ".*" + "Test- ( ) [ ] {} ! . , ` ~ @
fileName = "Test- ( ) [ ] {} ! . , ` ~ @ # % ; = - + &";
string pattern = ".*" + fileName + @"_\d{2}_\d{2}_\d{2}.xml";
//pattert = ".*" + "Test- ( ) [ ] {} ! . , ` ~ @ # % ; = - + &" + @"_\d{2}_\d{2}_\d{2}.xml";
Regex rgx = new Regex(pattern);
if (rgx.IsMatch("..\\"+"Test- ( ) [ ] {} ! . , ` ~ @ # % ; = - + &_13_45_23.xml"))
{
...
}
有机会使用这些特殊字符。我如何解决这个问题 如果要安全地处理文件名中的特殊字符,应使用该方法,例如:
string pattern = ".*" + Regex.Escape(fileName) + @"_\d{2}_\d{2}_\d{2}\.xml";
// and don't forget to escape the '.' here ^
使用Regex.Escape
filename = Regex.Escape(filename)
您需要先转义文件名
中的所有字符,然后再将其连接到模式
。请参见if(..)中@L.B对该条件的解决方案。在if(..)中,要将rgx与“.\\”+“Test-()[]{}.”匹配,`~@\\%;=-+&&u13\u45\u23.xml“