我有多个文件路径,它们并不完全相同,但都包含一个带有对象名称的文件夹,然后再进入某个路径。这一点并不总是一致的,名称也不一致。但是,对于相同的对象,对象名称将在多个路径中保持一致。例如:
在上面的例子中,我要找的名字是'object1'。但是,在下一个例子中,我正在寻找'pkwm34'。
我完全不确定如何处理这个问题,因为KMP算法仍然需要完整的字符串,加上要搜索的模式。所以基本上我正在分析它的方式,我必须找到所有可以使用string.Split打破的精确模式匹配,但是在现实世界的场景中我最终会在'\'和'上拆分_'然后以50%以上的模式进行搜索。这是一项艰巨的任务,此时我会非常喜欢这方面的帮助。可能出现的另一个问题,或者有人可能会问的问题是,这些模式都不会出现在可识别的语言中。此外,由于工作限制,在这种情况下我无法访问外部工具。
修改
为了帮助所有来回答这个问题,我将在评论中发布有用的问题的答案,以便您可以在本文的底部快速找到它们。
谢谢, 杰米
答案 0 :(得分:0)
以下是使用RegEx模式搜索的示例实现:
var list = new List<string>
{
@"C:\abc\i33\p4l\object1\so1\mko0\blah\filename.ext ",
@"C:\abc\i33\p4l\object1\so1\jiop1\mei\filename.ext ",
@"C:\abc\i33\p4l\object1\so1\jum\i99\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\pkwm34\werg\asdc\ddf\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\abc_pkwm34_jj5\werg\asdc\ddf\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\abc_pkwm34_abc_abc_jj5\werg\asdc\ddf\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\abc_pkwm34_abc_abc_jj5\werg\asdc\ddf4\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\abc_pkwm34_abc_abc_jj5\werg\asdc\ddf4\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\abc_pkwm34_abc_abc_jj5\ji2345op1\sdfg\filename.ext ",
@"C:\ertgh\xcvh\bfrth32456\abc_pkwm34_abc_abc_jj5\juxcm\isdf99\filename.ext "
};
var textToFind = @"\W*(object1)|(pkwm34)\W*";
var results = list.Where(x =>
x.Split('\\').Any(y => Regex.IsMatch(y, textToFind, RegexOptions.IgnoreCase))
).ToList();