检查多个不同字符串是否是第二个字符串的子字符串的最快方法

时间:2011-06-07 06:23:29

标签: substring match

上下文
我正在创建一个程序,它将对我的媒体文件进行排序和重命名,例如, The.Office.s04e03.DIVX.WaREZKiNG.avi进入一个有组织的文件夹结构,其中包含每个电视剧的文件夹列表,每个文件夹将包含季节的文件夹列表,这些文件夹将包含媒体文件。

问题: 我不确定阅读文件名的最佳方法是什么,并确定该名称的哪一部分是电视节目。对于例如在"The.Office.s04e03.DIVX.WaREZKiNG.avi"中,Office是该系列的名称。我决定列出所有电视节目,并检查每个电视节目是否是文件名中的子字符串,但据我所知,这意味着我必须根据每个文件的名称检查每个系列。

我的问题:我该如何确定字符串是否包含许多其他字符串之一?

由于

2 个答案:

答案 0 :(得分:0)

Aho-Corsasick算法[1]有效地解决了“这可能很长的字符串是否恰好包含任何这些短字符串”的问题。

但是,我怀疑这不是你要解决的问题。在我看来,你想要从一个可能有许多不同格式的字符串中提取可能的组件。我怀疑对于可能的提供者,视频格式,季节/剧集标记,可能是节目名称数据库等,有几个不同的正则表达式,真的是你想要的。然后,您可以在文件名上独立运行这些不同的“信息提取器”,以提取其结构。

[1] http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm

答案 1 :(得分:0)

一般来说,这取决于文件名的整体结构,例如系列名称总是先行?如果是这样,树形结构运作良好。单词之间是否有标准标记(在您的示例中为句点),如果是这样,您可以将字符串拆分为这些标记并创建一个不区分大小写的有趣单词哈希表以提高性能。

然而,提取季节和剧集变得更加困难,一个简单的解决方案是实现一种算法来处理你发现的每种格式,尽管通过使用提示你可以创建一个有趣的解析器,如果你也想要。 (但可能过度杀伤)