非典型正则表达式在文件中搜索

时间:2012-03-16 11:02:40

标签: regex

让我从高层面向你解释一下我在C#中尝试做什么(考虑到我的问题,语言非常不相关)。

我有一堆文件(让我们说文本文件),其中包含大量数据和目录结构链接到那些更多文件

例如: - 文件myfile.txt将如下所示..

This is a text file. This file has very few lines of data like bla bla bla and links like
D:/Presentations/Sales/Demo.pptx
and more links like 
D:/Word_documents/Studies/worddoc.doc

我要做的是获取所有这些文件的列表以及它们所在的目录结构。幸运的是,所有这些文件都在D:/中,但是最多可以有3个级别的目录到其中的文件中可能存在。

我已经编写了所有代码,而我所困扰的只是寻找文件模式的正则表达式。这是Algo,我在脑海中寻找文件: - 1.搜索要查找的文件D:/ 2.抓住文本开始/直到'。'遇到(点)(这将构成目录结构和文件名) 3.然后抓取下一个3/4字符(文件扩展名) - 会有不同类型的MS Office文件,我不会太担心是否要在。(点)之后查找3或4个字符

让我总结一下我坚持的用 - 正则表达式搜索模式来查找/// filename.extension

然后我需要获取文件名以查看文件是否存在,然后查看其内容。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

稍微有点回溯,应该这样做:

^D:/.*/(.*)

您应该将它与多线选项一起使用。

例如:

Regex rx = new Regex("^D:/.*/(.*)", RegexOptions.Multiline);
var str = @"This is a text file. This file has very few lines of data like bla bla bla and links like
D:/Presentations/Sales/Demo.pptx
and more links like 
D:/Word_documents/Studies/worddoc.doc";

var matches = rx.Matches(str);
var names = matches.Cast<Match>().Select(p => p.Groups[1].ToString()).ToArray();

答案 1 :(得分:0)

我尽可能地了解你的需求。

这是一个正则表达式,可以找到任何Windows或UNC(文件名包括你请求的3或4个字符的扩展名)路径匹配

(?:\b[a-z]:|\\\\[a-z0-9_.$]+\\[a-z0-9_.$]+)\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*\.[^\\/:*?"<>|\r\n]{3,4}

希望这有帮助。