我想解析在FCIV验证过程中报告的每个修改过的文件。
它是这样的:
“Microsoft Windows XP [版本5.1.2600] \ r \ n(C)版权所有1985-2001 Microsoft Corp. \ r \ n \ r \ nC:\ MD5Checksum> C:\ MD5Checksum \ fciv.exe -v - xml db.xml \ r \ n // \ r \ n //文件校验和完整性验证程序版本2.05。\ r \ n // \ r \ n启动校验和验证:09/10/2009 at 11h19'30 \ r \ n \ r \ n \ r \ n \ n \ n已修改文件的列表:\ r \ n \ r \ n ----------------------- \ r \ n \ r \ n \ nc:\ md5checksum \ readme.txt \ r \ r \ n \ tHash是\ t \ t \ t \ t \ t \:电子邮件:\ t \ t2x6d562bd35352b73c00a744e9c07c6 \ r \ n \ n \ t \ t应该是\ t:\ t \ t \ t:79ac8d043dc8739f661c45cc33fc07ac \ r \ r \ n \ n \ r \ nc:\ md5checksum \ fciv.exe \ r \ r \ n \ tHash是\ t \ t:79ac8d043dc8739f661c45cc33fc07ac \ r \ r \ n \ t \ t应该是\ t:e2c6d562bd35352b73c00a744e9c07c6 \ r \ r \ n \ r \ n \ r \ r \ n \ n \ n验证:09/10 / 2009年11月19日'30 \ r \ n \ r \ n \ r \ n \ r \ n \ r \ n \ C:\ MD5Checksum>“
现在我正在使用它作为Regex(工作正常),但我想知道是否有更简单的方法?
".*(\r\r\n\t)(Hash)( )(is)[\t]{2}(:)( )[a-zA-Z0-9]{32}(\r\r\n\t)(It)( )(should)( )(be)[\t](:)( )[a-zA-Z0-9]{32}"
答案 0 :(得分:1)
我建议你试试这个:
".*[^:]*: [a-zA-Z0-9]{32}[^:]*: [a-zA-Z0-9]{32}"
首先,您不需要每个标记“(..)”或“[...]”一个。 其次,既然我不认为你关心“这里是”或“它应该是”,你只需在你正在寻找的数字之前寻找“:”。
我真的希望得到这个帮助。
答案 1 :(得分:0)
太可怕了。你不需要把所有东西放在里面(),只需要在答案中分开你需要的东西。 阅读:http://www.regular-expressions.info/reference.html
/([0-9a-f]{32}).*?should be.*?([0-9a-f]{32})/is
由于我不是C#程序员,我只是不确定如何将/ i和/ s标志传递给C#regex(在C#中是必需的?)。我发现时会编辑。
[编辑]
Regex r;
MatchCollection mc;
r = new Regex("([0-9a-f]{32}).*?should be.*?([0-9a-f]{32})", RegexOptions.Singleline | RegexOptions.IgnoreCase);
mc = r.Matches(VarContainingTheText);