如何在C#中使用Regex复制FileSystemWatcher过滤器功能

时间:2013-02-26 14:55:09

标签: c# regex 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 ,后跟另一个
  • *.*(一切都被接受)

2 个答案:

答案 0 :(得分:2)

很少有时间我为我的作品写了类似的东西

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

答案 1 :(得分:0)

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