C#正则表达式-匹配整词?
我正在写一个程序,需要搜索一个大的文本文档,以获取大量的单词集合。这些单词都是文件名,里面有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用Regex来搜索这些名称,如果是,应该使用什么类型的reg。我应该使用什么顺序?我试过了 Regex r = new Regex("?this\_file\_name"); 正则表达式r=新正则表达式(“此文件名”);C#正则表达式-匹配整词?,c#,regex,C#,Regex,我正在写一个程序,需要搜索一个大的文本文档,以获取大量的单词集合。这些单词都是文件名,里面有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用Regex来搜索这些名称,如果是,应该使用什么类型的reg。我应该使用什么顺序?我试过了 Regex r = new Regex("?this\_file\_name"); 正则表达式r=新正则表达式(“此文件名”); 但是每次我都会收到一个无效的参数错误。查看源文本的示例会很有帮助。但也许这有帮助 var
但是每次我都会收到一个无效的参数错误。查看源文本的示例会很有帮助。但也许这有帮助
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);
如果我正确理解了您的问题,我认为正则表达式对于这项工作来说是错误的工具。我假设您的文件名用某种分隔符(如逗号或新行)分隔 如果是这种情况,请使用
String.Split
将所有文件名放入一个数组中,按字母顺序对数组进行排序,然后对您提到的“集合”中的每个项目的排序数组执行二进制搜索。我很确定这是执行任务的计算效率最高的方法
当你说“大”文本文件时,想想它们相对于运行该程序的机器的大小。1 MB的文本文件看起来可能很大,但它很容易放入具有2 GB RAM的计算机内存中。如果该文件比客户端计算机的内存大得多,请一次分块读取该文件。这就是所谓的缓冲。也许可以先通过拆分空格或非单词字符将文档拆分为标记 之后,我认为可能适用于您的正则表达式将如下所示:
Regex r=newregex(@“([\w_]+)”)
不需要多行修饰符。正如Alan指出的那样,RegexOptions.Multiline
是不需要的。阅读它的文档。只有当您使用^
和/或$
时,它才起作用。