使用完全限定文件名问题的Bucket排序——实际上是一个解析问题
本文关键字:问题 实际上 一个 排序 Bucket 文件名 | 更新日期: 2023-09-27 17:49:36
我可以这样做,但我的解决方案似乎有点破解,所以我想让so获得一个更优雅的解决方案。我需要获取一个完全限定的文件名列表,并根据路径名中的子字符串将它们排序/复制到几个桶中。
我有三个水桶,也许更多,可以换。假设我有三个桶,这些文件被复制到其中,比如"foo"、"foo''bar"answers"foo''baz"。因此,文件C:''mumble''foo''bar''thing.extension进入foo''bar存储桶,C:''tuck''foo''baz''this''is''other''directory''bling.extension进入''foo''biz存储桶,D:''tuckle''foo''thing.extension进入foo存储桶。我需要重定向文件,所以我一直在使用IndexOf(这样我就可以创建副本的方向(,但这并不能很好地工作,因为''foo和foo''bar相似,需要不同的bucket。然后我想我可以用文件。包含,但'' foo和'' foo '' baz进入不同的桶,因此需要优先级,foo '' bar到一个,而'' foo到另一个。
有什么想法可以相对简单地做到这一点吗?我的代码很尴尬。
感谢Doug
尝试类似的方法。
private static readonly Regex _foo = new Regex(@"''foo''(?! (bar|baz)'')",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
private static readonly Regex _foobar = new Regex(@"''foo''bar''",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
private static readonly Regex _foobaz = new Regex(@"''foo''baz''",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
foreach (var filename in files)
{
if (_foo.IsMatch(filename))
{
// bucket foo
}
else if (_foobar.IsMatch(filename))
{
// bucket foobar
}
else if (_foobaz.IsMatch(filename))
{
// bucket foobaz
}
}
或者,去掉_foo中的负前瞻,将其作为if语句的最后一个条件。