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个这个消息的实例,手动编辑它需要很长时间。
编辑:更新的解决方案,完整的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);