c#Regex,我怎样才能逃脱
我试图用正则表达式实例化一个新的c#Regex,我怎样才能逃脱,c#,regex,C#,Regex,我试图用正则表达式实例化一个新的Regex类 var reg=new Regex(“[”+token.Key+“]]”) 但是我得到了以下错误 System.ArgumentException:'按相反顺序分析“[[Impact]]”-[x-y]范围。 如何在正则表达式中用双方括号实例化新类?只需用括号转义每个括号,如下所示: var reg = new Regex("[[[["+ token.Key +"]]]]"); 试一试 例如,如果token.Key等于“Impact”,则它将匹配[[
Regex
类
var reg=new Regex(“[”+token.Key+“]]”)代码>
但是我得到了以下错误
System.ArgumentException:'按相反顺序分析“[[Impact]]”-[x-y]范围。
如何在正则表达式中用双方括号实例化新类?只需用括号转义每个括号,如下所示:
var reg = new Regex("[[[["+ token.Key +"]]]]");
试一试
例如,如果token.Key
等于“Impact”
,则它将匹配[[Impact]]
var reg = new Regex(@"\[\[" + token.Key + @"]]");
(注意:实际上不需要第二个@)
更新:
这甚至更好:
var reg = new Regex($@"\[\[{token.Key}]]");
您可以使用内置函数来转义:
var re = Regex.Escape("[[") + token.Key + Regex.Escape("]]");
var reg = new Regex(re);
但是您可能还想转义令牌.Key
或者只使用字符串。Contains(…)
,如果您不想使用正则表达式的特殊功能。您需要为正则表达式转义字符“[”和“]”,如果您使用“\”转义括号,则还需要转义C#字符串中的字符
这意味着它可以是:
"\\[\\[" + key + "]]"
或
或
您不需要转义后一个“]”,因为如果前面没有未转义的“[”字符,正则表达式会将它们识别为普通字符。我在(正则表达式测试网站)上尝试过,其他答案也表明了这一点。您是否尝试过“\\[\\[”+token.Key+“\\]\\]”
?首先,有趣的是,我没有遇到这样的例外。另一方面,你想实现什么?你想让正则表达式以文本形式匹配[[和]]吗?是的,它不起作用。我会试试\\[\\[
然后看看是什么happens@ZorgoZ是的,这就是我想要的。@ZorgoZ根据我的反对票,这不是一个真正的反对票,但信息量很大,但它可能是您正在使用的不同风格的正则表达式。这个扩展名叫什么?这个屏幕截图是一个LinqPad片段。.Dump
是它的一部分,但这是一些东西类似:@vc74是的,我已经注意到,正如您所看到的,显然,结束括号集不需要转义。我在regexpal上尝试过:@ManuelHoffmann是的,检查转义字符串也会显示出这一点。但是当它们不是已知的文本时,您可能希望安全。当然,这是绝对正确的。我只是如果有人不知道的话,我会放弃它。谢谢,每个人都有很好的答案,但这一个给出了一个解释。
"\\[\\[" + key + "]]"
@"\[\[" + key + "]]"
Regex.Escape("[[") + key + "]]"