Visual Studio中的正则表达式用于重命名日志记录方法参数字符串?

时间:2012-01-19 11:48:49

标签: c# regex visual-studio

在Visual Studio中,我很想知道要替换的正则表达式:

MyLog.LogFatal("Error E20111205-1147. Custom error.\n");

用这个:

MyLog.LogFatal("{0}Error E20111205-1147. Custom error.\n",TPrefix(this));

它必须适用于任何错误编号,即E12345678-1234。

更新

我应该澄清一下我的问题:我想在Visual Studio中使用“Find..Find和Replace..Quick Replace”(Ctrl-H)命令更改我的C#源代码。我的C#源代码树中有大约1,000个此消息的实例,手动编辑它需要很长时间。

4 个答案:

答案 0 :(得分:3)

编辑:更新的解决方案,完整的正则表达

从:

开始
MyLog.LogFatal("Error E20111205-1147. Custom error.\n");

查找表达式:

// Matches MyLog.LogFatal(" {any text with 0-9, a-z, A-Z, space, -, . character 
//   and terminated by \n"} "); 
// Hence, the captured expression from your example is 
//   Error E20111205-1147. Custom error.\n"
MyLog.LogFatal\(\"{[0-9a-zA-Z -\\\.]+\\n\"}\);

替换表达式:

// Replaces MyLog.LogFatal("{0} {your captured expression}, TPrefix(this));
MyLog.LogFatal(\"{0}\1, TPrefix(this));

你得到:

MyLog.LogFatal("{0}Error E20111205-1147. Custom error.\n", TPrefix(this));

有关VS2010正则表达式查找和替换的介绍,请参阅此blog post

答案 1 :(得分:2)

假设实际的“日志文本”只是一个示例,实际上您有不同的消息:

找到:

  

MyLog \ .LogFatal \( “{+}” \);

替换为:

  

MyLog.LogFatal(“{0} \ 1”,TPrefix(this));

更新 Dang!只是发现“Blockquote”抑制了单斜线。

答案 2 :(得分:1)

尝试以下

{MyLog.[A-Za-z]+\("}{Error E[^ ]+\..*}\);

替换第一个捕获
`\1{0}\2,TPrefix(this));`

这也会找到MyLog.LogWarning,MyLog.LogError。如果您不想这样,请使用LogFatal删除[A-Za-z]。

正则表达式的解释:

  • {....}第一个和第二个捕获的组,捕获MyLog.LogFatal("(包括引用),这些是替换表达式中的\1\2
  • [A-Za-z]+捕获任何仅包含A-Z和a-z字符的关键字,+表示一个或多个
  • \(您必须转义括号
  • E[^ ]+E开头,然后包含空格
  • \.以点结尾(您必须转义点,否则表示任何字符)。
  • .*一切直到行尾

或者,如果logmessage更不同,但您知道MyLog.XXX调用,您还可以使用以下内容,仅捕获包含E #####形式的片段(其中#是任何内容)数字)。替换表达式与上面的相同。

{MyLog.Log(Debug|Warning|Error|Fatal)\("}{.*E[0-9-]+\..*}\);

答案 3 :(得分:0)

String s="Error E20111205-1147. Custom error.\n";
Regex re=new Regex("^Error E\\d{8}-\\d{4}\\. Custom error\\.\\n$");
if (re.Matches(s).Count>0) s=String.Format("{0}{1}",TPrefix(this),s);