2013-07-26 101 views
0

我試圖找到一些文件名寫入以'K.TIF'結尾的日誌文件中。c#中的正則表達式在日誌中查找文件

我試圖找到:

20130629VGM180ZZ001001K.TIF 
20130629VGM180ZZ001002K.TIF 

正如我在正則表達式的很可怕的,我想這一點:

Regex.Match(line, @"([A-Z0-9]+){23}\.TIF", RegexOptions.IgnoreCase); 
Regex.Match(line, @"(?<=\\)(.>)(?=K\.TIF){23}", RegexOptions.IgnoreCase); 

第一個是可怕的,沒有按沒有表現,並給出不好的結果。

如果我將K \更改爲Z,第二個實際上會給出以Z.TIF結尾的所有TIF。但是,它沒有找到任何與當前正則表達式匹配的K.TIF。

+0

如果性能是一個問題,使用靜態編譯的正則表達式,像這樣:'靜態正則表達式_matcher =新的正則表達式(@「......」,RegexOptions.IgnoreCase | RegexOptions.Compiled)',在你的檢查中你只需執行'_matcher.Match(line)'。應該**很多**更快。第一個不應該有性能問題。 – Alxandr

+0

此外,你應該改變'@「([A-Z0-9] +){23} \。TIF」'爲'@「[a-z0-9 \\] K \ .TIF」' – Alxandr

回答

1

這似乎爲我工作:

^.*\\(\w*K.TIF)$ 

它搜索最後一個斜槓,然後捕獲單詞字符後跟K.TIF。例如:http://www.regex101.com/r/nH6gV4

+0

接縫是最簡單和最快的方式。感謝您的解決方案,完美適合我! –

0

此正則表達式會得到你想要的東西:

\\([A-Z0-9]{22}K\.TIF)$ 

你不應該使用IgnoreCase爲您特別製作的正則表達式匹配只是帽。

提取值將是內部的匹配組,以便使用:

string MatchedFileName = Regex.Match(line, @"[A-Z0-9]{22}K\.TIF$").Value; 

(更新,感謝泰勒您指出我沒有正確讀取的OP的問題)

(因爲它再次更新didnt需要在開始反斜線或捕獲組)

+1

這會得到然後全部以.TIF結尾而不是K.TIF – Tyler

0

第一個正則表達式是非常接近的答案,但它有一個額外的「+」。我認爲你可以嘗試下面的代碼。

Regex.Match(line, @"([A-Z0-9]){22}K\.TIF", RegexOptions.IgnoreCase); 
0

使用這個表達式var res = Regex.Match(line, @"(?im)^.+k\.tif$";

相關問題