2013-02-26 50 views
2

我有一個用於c#項目的單個FileSystemWatcher對象,以及發生事件時要匹配的多個模式。如何使用C#中的正則表達式複製FileSystemWatcher過濾功能#

作爲項目需求,我無法創建多個FileSystemObjects並使用單獨的過濾器方法來匹配我的模式。所以必須有一個過濾器設置爲*.*到 監視所有文件,並且當創建事件時,我必須應用正則表達式來在循環中處理每個模式的匹配文件。我的模式將包含*個字符,與我們將其傳遞給Filter方法的方式相同。

如何使用單個Regex語句複製內置的過濾器功能?

許多FileSystemWatcher過濾器場景中的一些;

  • pi*.txt(這應該符合:piano.txt,pie.txt)
  • *.doc(與DOC任何擴展應該匹配)
  • 04*2013.txt(任何文本文件,它應該是任何一天在四月份)
  • pi*ar*.jpg(前綴是PI,包含AR前綴之後,在任何地方的文件名,並必須有一個JPG擴展)
  • pre*ar*pre(與前綴的文件,然後AR和另一
  • *.*(任何被接受)
+0

請參閱http://stackoverflow.com/questions/4124951/translating-filename-wildcards-to-regex – 2013-02-26 15:02:27

+0

哪部分你有問題? [RegEx](http://en.wikipedia.org/wiki/Regular_expression)語法可以在[.NET]中找到[http://www.regular-expressions.info/tutorial.html],.NET中的正則表達式類被稱爲[Regex](http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx)並使用正常[表達式模式](http://msdn.microsoft.com /en-us/library/az24scfc.aspx)。 – nvoigt 2013-02-26 15:04:19

回答

2

很少有時間回來後跟我爲我的作品寫了類似的東西

public static string WildcardPatternToRegexPattern(string pattern) 
{ 
    return string.Format("^{0}$", Regex.Escape(pattern.Replace('/', Path.DirectorySeparatorChar)).Replace(@"\*", ".*").Replace(@"\?", ".")); 
} 
+0

打敗我吧,還有一些額外的:) – Rawling 2013-02-26 15:04:07

+0

這個作品非常完美,謝謝! – Alex 2013-02-26 15:21:06

+0

@亞歷克斯 - 很高興我能幫上忙!如果問題解決了您的問題,請將問題標記爲已解決 – 2013-02-26 15:47:24

0

如果你正在尋求學習正則表達式的語句,您可以先看看http://txt2re.com/。如果你粘貼一段文字,就有一個點擊界面爲你生成正則表達式。我也會推薦使用谷歌搜索「preg」。

相關問題