在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个此消息的实例,手动编辑它需要很长时间。
答案 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);