我想简单解释一下正则表达式在C#中的转义结构。我已经阅读了MSDN页面,但似乎我无法编写工作Regex.Escape()
另外,一个逃避“(”,“)”和“。”的工作示例。人物会很棒。例如somestring = Regex.Escape("("+"(.*?))");
由于
答案 0 :(得分:1)
如documentation中所述:
转义一组最小字符(,\,*,+,?,|,{,[,(,),#,^,$ ,., 用空格代码替换它们。这指示正则表达式引擎解释这些字符 字面上而不是元字符。
这基本上意味着,在正则表达式语言中,您有一些特殊的字符。这些字符包括?
,*
,.
,+
等运营商。
例如,要使用正则表达式威胁,+
作为字符+
,而不是以前的运算符中的一个或多个,我们就像这样逃避它:\+
。这告诉解析引擎按原样处理+
。
escape方法的作用是为这些字符添加额外的反斜杠。
因此,鉴于此:Regex.Escape("("+"(.*?))");
,输出字符串将为\(\(\.\*\?\)\)
,这意味着匹配给定的字符串:(.*?))
。
答案 1 :(得分:0)
在变量中可能存在一些正则表达式元字符的可能性,在这个变量中,您尝试使用该变量的值作为正则表达式来搜索特定的子字符串。在这种情况下,我们需要将变量放在Regex.Escape
函数内,以使变量内的特殊字符自动转义。
答案 2 :(得分:0)
Regex.Escape("("+"(.*?))")
输入中的任何元字符基本上都会在其前面加上反斜杠。所以:
\(\(\.\*\?\)\)
但是,当然,任何显示字符串的东西就像它在C#源代码中一样(如VS调试器工具窗口)本身会逃避反斜杠,因此显示如下:
\\(\\(\\.\\*\\?\\)\\)
(因此,为什么verbastin字符串对正则表达式非常有用。)
PS。不要编写自己的Regex.Escape
:你只会错过语法的一些边缘情况(并且有很多)。可以使用Framework方法,因此请使用它。