C#正则表达式,我怎么能逃脱[[和]]

时间:2018-07-26 06:26:02

标签: c# regex

我正在尝试使用正则表达式实例化一个新的Regex

var reg = new Regex("[[" + token.Key + "]]");

但是我遇到了以下错误

System.ArgumentException: 'parsing "[[Impact]]" - [x-y] range in reverse order.'

如何在正则表达式中使用双方括号实例化新类?

5 个答案:

答案 0 :(得分:4)

您可以使用内置函数来转义:

var re = Regex.Escape("[[") + token.Key + Regex.Escape("]]");
var reg = new Regex(re);

但是您可能还想逃脱token.Key

如果您不希望正则表达式的特殊功能,也可以使用string.Contains(...)

答案 1 :(得分:3)

您需要对正则表达式的字符“ [”和“]”进行转义,如果您使用“ \”对括号进行转义,那么也需要对C#字符串中的字符进行转义。

这意味着它可以是:

"\\[\\[" + key + "]]"

@"\[\[" + key + "]]"

Regex.Escape("[[") + key + "]]"

您不需要转义后一个“]”,因为如果在它们前面没有未转义的“ [”,则Regex会将它们识别为普通字符。我在Regexpal(正则表达式测试网站)上进行了尝试,其他答案也表明了这一点。

答案 2 :(得分:2)

此作品有效:

var reg = new Regex(@"\[\[" + token.Key + @"]]");

enter image description here

(注意:实际上不需要第二个@)

更新: 更好:

var reg = new Regex($@"\[\[{token.Key}]]");

答案 3 :(得分:1)

只需将每个括号都用括号括起来,如下所示:

var reg = new Regex("[[[["+ token.Key +"]]]]");

答案 4 :(得分:1)

尝试

var reg = new Regex("[[][[]" + token.Key + "[]][]]");

它将匹配,例如[[Impact]]等于token.Key的{​​{1}}。