Regex 用于解析Microsoft文件校验和完整性验证器输出的更简单的正则表达式?

Regex 用于解析Microsoft文件校验和完整性验证器输出的更简单的正则表达式?,regex,Regex,我想解析出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开始校验和验证:2009年10月9日11时19分30分\r\r\n\r\n\r\n修改文件列表:\r\r

我想解析出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开始校验和验证:2009年10月9日11时19分30分\r\r\n\r\n\r\n修改文件列表:\r\r\n--------------------------------\r\r\r\n\r\n\n\r\n nC:\MD5Checksum\readme.txt\r\n\r\n\r\n塔什为E2C656Dd35352b73c00a744e9c07c6\r\n\t应该是\t:79ac8d043dc8739f661c45cc33fc07ac\r\n\r\nc:\md5checksum\fciv.exe\r\n\r\n\t\t\t\t:79ac8d043dc8739f661c45cc33fc07ac\r\r\n\t应该是\t:E2C6D562BD35352BD352B73C00A744E7C6\r\n\r\n\r\n\r\r\n\r\r\r\r\r\r\r\n\r\n\n\n\r\n\r\n\n\r\n\n\r\n 2009/nEnd验证地址:79AC8D043DC43DC8739D43DC8739F33CC33CF33FC07AC\r\r\r\r\n

现在我用它作为正则表达式(很好用),但我想知道是否有更简单的方法

".*(\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}"

我建议你试试这个:

".*[^:]*: [a-zA-Z0-9]{32}[^:]*: [a-zA-Z0-9]{32}"
首先,您不需要对每个令牌都使用“(…)”或“[…]”符号。 第二,因为我认为你不在乎“这是”或“它应该是”,你可以简单地查找“:”就在你要查找的号码之前


我真的希望这能帮上忙。

太可怕了。您不需要将所有内容都放在()中,只需要在答案中分离出您需要的内容。 请阅读以下内容:

由于我不是C#程序员,我只是不知道如何将/I和/s标志传递给C#regex(C#中是否需要/s)。我知道后会编辑

[编辑]


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);

非常好用,谢谢!我对正则表达式比较陌生,所以有点困惑。

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);