字符串替换的正则表达式

时间:2012-06-27 15:28:03

标签: c# regex

我有100个文件需要替换:

  1. Eval(“something”)与Eval(“something”)。ToEncodedString()
  2. Eval(“something”)。ToString()with Eval(“something”)。ToEncodedString()
  3. 我正在编写一个可以自动执行此操作的小型C#应用程序。但无法形成正则表达式。有人会帮帮我吗?

1 个答案:

答案 0 :(得分:2)

您可以使用此模式:@"\bEval\(""(?<Value>.+?)""\)(?:\.ToString\(\))?"

故障:

  • \bEval:匹配字边界以确保我们将“Eval”匹配为整个单词而不是另一个单词的一部分
  • \("":字面左括号和双引号(双引号出现两次,因为当使用逐字字符串文字时它们是如何被转义的,即字符串前面的@符号)
  • (?<Value>.+?):名为“Value”的捕获组,它是任何字符的非贪婪匹配(将以双引号停止)
  • ""\):关闭双引号和右括号
  • (?:\.ToString\(\))?(?:...)位是非捕获组,然后我们将.ToString()字面上与适当的转义相匹配,最后?使此组可选

替换模式为@"Eval(""${Value}"").ToEncodedString()",这很容易理解。重要的部分是使用${Value}引用命名的捕获组“Value”。

示例代码:

string[] inputs = 
{
    @"Eval(""something"")",
    @"Eval(""hello"").ToString()"
};

string pattern = @"\bEval\(""(?<Value>.+?)""\)(?:\.ToString\(\))?";
string replacement = @"Eval(""${Value}"").ToEncodedString()";

foreach (var input in inputs)
{
    Console.WriteLine(Regex.Replace(input, pattern, replacement));
}