我正在编写一个程序,需要在大型文本文档中搜索大量单词。这些单词都是文件名,其中包含下划线(例如this_file_name)。我知道如何打开并遍历文本文档,但我很好奇是否应该使用正则表达式来搜索这些名称,如果是,那么是什么样的注册表。恩。我应该使用哪个序列?我试过了
Regex r = new Regex("?this\_file\_name");
但每次都会出现无效的参数错误。
答案 0 :(得分:3)
查看源文本的示例会很有帮助。但也许这有帮助
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);
答案 1 :(得分:1)
或许首先通过拆分空格或非单词字符将文档分解为标记?
之后,我认为可能对你有用的正则表达式看起来像这样:
Regex r = new Regex(@"([\w_]+)");
答案 2 :(得分:0)
如果我理解你的问题,我认为正则表达式是错误的工具。我假设你的文件名用某种分隔符(如逗号或新行)分隔。
如果是这种情况,请使用String.Split
将所有文件名放入数组中,按字母顺序对数组进行排序,然后针对您提到的“集合”中的每个项目对已排序的数组执行二进制搜索。我非常确定这是执行任务的计算效率最高的方式。
当您说“LARGE”文本文件时,请考虑它们相对于此程序将运行的计算机的大小。一个1 MB的文本文件可能看起来很大,但它很容易适应具有2 GB RAM的机器的内存。如果文件与客户端计算机的内存相比要大得多,请一次以块的形式读取文件。这称为缓冲。