【发布时间】:2009-02-07 02:07:02
【问题描述】:
我正在编写一个程序,该程序需要在 LARGE 文本文档中搜索大量单词。这些词都是文件名,其中带有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用 Regex 来搜索这些名称,如果是,应该使用哪种 reg。前任。我应该使用序列吗?我试过了
正则表达式 r = new Regex("?this\_file\_name");但我每次都得到一个无效的参数错误。
【问题讨论】:
我正在编写一个程序,该程序需要在 LARGE 文本文档中搜索大量单词。这些词都是文件名,其中带有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用 Regex 来搜索这些名称,如果是,应该使用哪种 reg。前任。我应该使用序列吗?我试过了
正则表达式 r = new Regex("?this\_file\_name");但我每次都得到一个无效的参数错误。
【问题讨论】:
查看源文本示例会很有帮助。但也许这会有所帮助
var doc = @"asdfsdafjkj;lkjsadf asddf jsadf asdfj;lksdajf
sdafjkl;sjdfaas sadfj;lksadf sadf jsdaf jf sda sdaf asdf sad
jasfd sdf sadf sadf sdajlk;asdf
this_file_name asdfsadf asdf asdf asdf
asdf sadf asdfj asdf sdaf sadfsadf
sadf asdf this_file_name asdf asdf ";
var reg = new Regex("this_file_name", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var matches = reg.Matches(doc);
【讨论】:
RegexOptions.Multiline。阅读它的文档。仅当您使用 ^ 和/或 $ 时才会有所不同。
也许通过首先拆分空格或非单词字符将您的文档分解为标记?
之后,我认为可能适合您的正则表达式看起来像这样:
Regex r = new Regex(@"([\w_]+)");
【讨论】:
如果我正确理解您的问题,我认为正则表达式是不适合这项工作的工具。我假设您的文件名用某种分隔符(如逗号或换行符)分隔。
如果是这种情况,请使用String.Split 将所有文件名放入一个数组中,按字母顺序对数组进行排序,然后针对您提到的“集合”中的每个项目对排序后的数组执行二进制搜索。我很确定这是执行任务的计算效率最高的方式。
当您说“大”文本文件时,请考虑它们相对于运行该程序的机器的大小。 1 MB 的文本文件可能看起来很大,但它很容易放入具有 2 GB RAM 的机器的内存中。如果该文件与您的客户端计算机的内存相比要大得多,请一次读取该文件。这称为缓冲。
【讨论】: