正则表达式:替换字符串

时间:2011-06-21 10:07:38

标签: c# regex replace

我目前正面临一个(小)阻塞问题。我想使用正则表达式替换子串。但这就是诀窍:我吮吸正则表达式。

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

基本上我想替换“by”测试之间的任何内容。我试过“。{*}”作为模式,但它不起作用。

你能给我一些提示吗,我很感激!

4 个答案:

答案 0 :(得分:3)

您需要处理几个问题。

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

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

答案 1 :(得分:1)

完全基于我对正则表达式的了解(而不是如何在C#中完成),你想要的模式可能是:

"[^"]*"

ie - 匹配“然后匹配所有不是”的东西,然后匹配另一个“

您可能需要转义双引号以使您的正则表达式解析器实际匹配它们...这就是我不知道的关于C#的内容

答案 2 :(得分:0)

尽量避免使用正则表达式中的'。*',通常可以通过避免使用其他字符来找到想要获得的内容,例如[^“] +未引用,或者([^)] +)在括号中。所以你可能只想要“([^”] +)“哪个应该给你[0]中的全部内容,然后在[1]中你会找到'test'。

您也可以将'''替换为''我认为。

答案 3 :(得分:0)

Taryn Easts正则表达式包括*。如果它只是任何值的占位符,则应将其删除:

"[^"]"

BTW:您可以使用这个很酷的编辑器测试这个正则表达式:http://rubular.com/r/1MMtJNF3kM