2009-09-10 38 views
0

我想分析FCIV驗證過程中報告的每個修改後的文件。解析Microsoft File Checksum Integrity Verifier輸出的簡單正則表達式?

它出來是這樣的:

「的Microsoft Windows XP [版本5.1.2600] \ r \ n(C)版權所有1985-2001微軟公司\ r \ n \ r \ NC:\ MD5Checksum> C:\ MD5Checksum \ fciv.exe -v -xml db.xml \ r \ n // \ r \ n // File Checksum Integrity Verifier版本2.05。\ r \ n // \ r \ n開始校驗和驗證:09/10/2009 at 11h19'30 \ r \ r \ n \ r \ r \ n修改文件列表:\ r \ r \ n ---------------------- - \ r \ r \ NC:\ md5checksum \ README.TXT \ r \ r \ n \ THASH是\噸\噸:e2c6d562bd35352b73c00a744e9c07c6 \ r \ r \ n \ TIT應\噸:79ac8d043dc8739f661c45cc33fc07ac \ r \ r \ n \ r \ NC:\ md5checksum \ fciv.exe \ r \ r \ n \ THASH是\噸\噸:79ac8d043dc8739f661c45cc33fc07ac \ r \ r \ n \ TIT應\噸:e2c6d562bd35352b73c00a744e9c07c6 \ r \ r \ n \ r \ n \ r \ r \ nEnd Verification:09/10/2009 at 11h19'30 \ r \ r \ n \ r \ r \ n \ r \ nC:\ MD5Checksum>「

現在我用這個作爲正則表達式(其中正常工作),但我不知道是否有一個更簡單的方法?

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

回答

1

我建議你試試這個:

".*[^:]*: [a-zA-Z0-9]{32}[^:]*: [a-zA-Z0-9]{32}" 

首先,你不需要 「(..)」 或 「[...]」 每一個令牌。第二,由於我不認爲你關心「這裏是」或「它應該是」,所以你可以簡單地在你尋找的號碼之前尋找「:」。

我真的希望這種幫助。

+0

完美的作品,謝謝!我對正則表達式比較陌生,所以有點混亂。 – 2009-09-10 18:50:19

0

它的可怕。你不需要把所有東西都放進去(),只需要你在回答中分離出來。 閱讀:http://www.regular-expressions.info/reference.html

/([0-9a-f]{32}).*?should be.*?([0-9a-f]{32})/is

由於我不是一個C#程序員,我只是不知道如何打發/ I和C#正則表達式/ s的標誌(是/ s的必要的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);