2011-06-21 251 views
1

我目前正面临一个(小)阻塞问题。我想用正则表达式替换一个子串。但这里有个诀窍:我吸取正则表达式。正则表达式:替换字符串

Regex.Replace(contenu, "Request.ServerVariables("*"))", 
         "ServerVariables('test')"); 

基本上我想更换什么是之间的“通过‘测试’。我想”。{*}”的模式,但它不能正常工作。

能给我一些技巧,我会很感激的

回答

3

有几个问题需要注意。

  1. 你在你的正则表达式中使用了特殊字符(.,parens,引号) - 你需要用斜杠来转义它们。而且你还需要用另一个斜杠来跳过斜线,因为我们使用的是C#字符串,除非在字符串前添加@,在这种情况下,转义规则是不同的。
  2. 匹配“任意字符数”的表达式为.*。在这种情况下,您需要匹配任何数量的非引号字符,即[^"]*
  3. 与上面(1)相反,替换字符串不是正则表达式,因此您不需要任何斜杠。
  4. 您需要在某处存储替换的返回值。

最终的结果是

var result = Regex.Replace(contenu, 
          @"Request\.ServerVariables\(""[^""]*""\)", 
          "Request.ServerVariables('test')"); 
1

在我的正则表达式的基于知识的纯粹(而不是他们如何在C#中完成),你想要的模式可能是:

"[^"]*" 

即 - 匹配“然后匹配一切不是“那么马” TCH另一个“

您可能需要转义双引号,让您的正则表达式解析器实际上匹配他们......这就是我不知道C#

+1

死的权利。转义版本看起来像'Regex.Replace(contenu,“Request \\。ServerVariables \\(\”[^ \“] * \”\\)“,”Request.ServerVariables(\“test \”)“ );''或'Regex.Replace(contenu,@“Request \ .ServerVariables \(”“[^”“] *”“\)”,@“Request.ServerVariables(”“test”“)”);' – LukeH

0

尽量避免在那里你可以将' 。''在正则表达式中,通常可以通过避开其他字符找到想要的内容,例如[^“] +未引用,或者([^)] +)不在括号内。所以你可能只想要“([^”] +)“这应该给你在[0]的整个事情,然后在[1]你会发现'测试'。 '与''我想。

0

泰伦Easts正则表达式包括*。您应该删除它,如果它仅仅是对任何值的占位符:

"[^"]" 

BTW:你可以同此凉编辑测试这个表达式:http://rubular.com/r/1MMtJNF3kM