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

本文关键字:参数 方法 字符串 正则表达式 记录 日志 Studio 用于 重命名 Visual | 更新日期: 2023-09-27 18:20:41

在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 and Replace..Quick Replace"(Ctrl-H)命令更改我的C#源代码。在我的C#源代码树中大约有1000个这个消息的实例,手动编辑它需要很长时间。

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

编辑:更新的解决方案,完整的Regex是

起始:

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 Regex查找和替换的介绍,请参阅此博客文章。

假设实际的"日志文本"只是一个例子,而实际上您有不同的消息:

查找内容:

MyLog''.LogFatal ''("{.+}"'');

替换为:

MyLog.LogFatal("{0}''1",TPrefix(this));

更新危险!只是刚刚发现"Blockquote"抑制单斜杠。

尝试以下

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

用替换第一次捕获

`'1{0}'2,TPrefix(this));`

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

正则表达式的解释:

  • {....}第一个和第二个捕获组,捕获MyLog.LogFatal("(包括引号),它们是替换表达式中的'1'2
  • [A-Za-z]+捕获任何只包含A-Z和A-Z字符的关键字,+表示一个或多个
  • '(必须转义括号
  • E[^ ]+E开始,然后包含空格
  • '.,并以句点结尾(必须转义句点,否则表示任何字符
  • .*所有内容直到线路结束

或者,如果日志消息更不同,但您知道MyLog.XXX调用,您也可以使用以下命令,仅对包含格式E#######(其中#是任何数字)的片段的调用进行captre。替换表达式与上面相同。

{MyLog.Log(Debug|Warning|Error|Fatal)'("}{.*E[0-9-]+'..*}');
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);