如果有可能减少嵌套"if"语句,我想重构我的代码,使其更优雅和清晰.
我的代码"解析"MsBuil进程的任何字符串(结果),以检查进程是否正确构建.
public static bool CheckMsBuildResult(string resultadoEjecucionScriptMsBuild)
{
// Build started 01/09/2010 8:54:07.
string s1 = @"Build Started \d{1,2}/\d\d/\d{4} \d{1,2}:\d\d:\d\d";
//Build started 9/1/2010 10:53:35 AM.
//Build started 9/1/2010 8:42:16 AM.
string s1Mod = @"Build Started \d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d\d:\d\d";
s1 = s1Mod;
string s11 = @"n Generar iniciada a las \d{1,2}/\d\d/\d{4} \d{1,2}:\d\d:\d\d";
// Compilaci?n iniciada a las 28/02/2011 14:56:55.
string s12 = @"Compilaci.n iniciada a las \d{1,2}/\d\d/\d{4} \d{1,2}:\d\d:\d\d";
string s2 = "Build succeeded.";
string s21 = @"Generaci.n satisfactoria\.";
string s3 = @"0 Error\(s\)";
string s31 = "0 Errores";
Regex rg = new Regex(s1, RegexOptions.Multiline | RegexOptions.IgnoreCase);
Match mt = rg.Match(resultadoEjecucionScriptMsBuild);
if (!mt.Success)
{
rg = new Regex(s11, RegexOptions.Multiline | RegexOptions.IgnoreCase);
mt = rg.Match(resultadoEjecucionScriptMsBuild);
if (!mt.Success)
{
rg = new Regex(s12, RegexOptions.Multiline | RegexOptions.IgnoreCase);
mt = rg.Match(resultadoEjecucionScriptMsBuild);
if (!mt.Success) return false;
}
}
int i = mt.Index + mt.Length;
rg = new Regex(s2, RegexOptions.Multiline | RegexOptions.IgnoreCase);
mt = rg.Match(resultadoEjecucionScriptMsBuild, i);
if (!mt.Success)
{
rg = new Regex(s21, RegexOptions.Multiline | RegexOptions.IgnoreCase);
mt = rg.Match(resultadoEjecucionScriptMsBuild);
if (!mt.Success)
{
return false;
}
}
i = mt.Index + mt.Length;
rg = new Regex(s3, RegexOptions.Multiline | RegexOptions.IgnoreCase);
mt = rg.Match(resultadoEjecucionScriptMsBuild, i);
if (!mt.Success)
{
rg = new Regex(s31, RegexOptions.Multiline | RegexOptions.IgnoreCase);
mt = rg.Match(resultadoEjecucionScriptMsBuild);
if (!mt.Success)
{
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
它看起来像你可以只使用,而不是一个更强大的正则表达式降低下来到代码一行或两行s1,s1mod,s12,等.然而,因为你已经节录你的正则表达式,我不能劝什么,将看喜欢.
我也批评这段代码
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |