我有大约 100 个文件需要替换:
- Eval("something") 与 Eval("something").ToEncodedString()
- Eval("something").ToString() 与 Eval("something").ToEncodedString()
我正在编写一个可以自动执行此操作的小型 C# 应用程序。但无法形成正则表达式。有人会帮我吗?
您可以使用此模式:@"\bEval\(""(?<Value>.+?)""\)(?:\.ToString\(\))?"
分解:
\bEval
: 匹配单词边界以确保我们将“Eval”作为一个完整的单词而不是另一个单词的一部分进行匹配\(""
:文字左括号和双引号(双引号出现两次,因为这是使用逐字字符串文字时它们被转义的方式,即字符串前面的@符号)(?<Value>.+?)
:命名为“Value”的捕获组,它是任何字符的非贪婪匹配(将在双引号处停止)""\)
: 右双引号和右括号(?:\.ToString\(\))?
: 该(?:...)
位是一个非捕获组,然后我们.ToString()
用适当的转义字面匹配,最后?
使这个组可选替换模式是@"Eval(""${Value}"").ToEncodedString()"
,很容易理解。重要的部分是命名的捕获组“值”是通过使用引用的${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));
}