3

我有一个用于 ac# 项目的 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(任何带有pre前缀的文件,后跟ar和另一个pre
  • *.*(什么都接受)
4

2 回答 2

3

不久前,我为我的工作写了类似的东西

public static string WildcardPatternToRegexPattern(string pattern)
{
    return string.Format("^{0}$", Regex.Escape(pattern.Replace('/', Path.DirectorySeparatorChar)).Replace(@"\*", ".*").Replace(@"\?", "."));
}
于 2013-02-26T15:02:48.770 回答
0

如果您想学习 regex 语句,可以从查看http://txt2re.com/开始。如果您粘贴一段文本,则会有一个点击界面为您生成正则表达式。我还建议只用谷歌搜索“preg”。

于 2013-02-26T15:03:05.547 回答