.Net Regex.Escape无法正常工作?

时间:2013-05-29 13:24:46

标签: c# .net regex

我正在尝试编写一个正则表达式,它接受一个字符串并将它们构建为一个表达式作为范围。我使用Regex.Escape(.net 3.5)来清理这些字符串,这样就不会有任何控制字符。但似乎Escape方法没有按预期工作,并且不会逃避关闭}]个字符。它不应该逃避这些吗?以下是我正在做的一个例子:

string test = @"sdfz346gv][)(}{><";
string pattern = "[" + Regex.Escape(test) + "]+";
string input = "ffff{444}g";

if (Regex.IsMatch(input, pattern))
{
    Console.WriteLine("Matched");
}
else
{
    Console.WriteLine("Not Matched");
}

pattern字符串的值似乎为[sdfz346gv]\[\)\(}\{><]+且与ffff{444}g不匹配,但就我而言,它应该看起来像这样[sdfz346gv\]\[\)\(\}\{><]+表达式执行不同的操作并匹配ffff{444}g。我可以用}]替换\}\]个字符,但还有其他任何字符都不会被此转义方法转义吗?我能依靠吗?

1 个答案:

答案 0 :(得分:4)

来自here

  

通过将其替换为转义码来转义一组最小字符(\,*,+,?,|,{,[,(,),^,$ ,.,#和空格)。

并且

  

当Escape方法转义直开括号([)并打开大括号({)字符时,它不会转义它们对应的结束字符(]和})。在大多数情况下,没有必要逃避这些。如果右括号或括号前面没有相应的开头字符,则正则表达式引擎会按字面解释它。