Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#正则表达式-匹配整词?_C#_Regex - Fatal编程技术网

C#正则表达式-匹配整词?

C#正则表达式-匹配整词?,c#,regex,C#,Regex,我正在写一个程序,需要搜索一个大的文本文档,以获取大量的单词集合。这些单词都是文件名,里面有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用Regex来搜索这些名称,如果是,应该使用什么类型的reg。我应该使用什么顺序?我试过了 Regex r = new Regex("?this\_file\_name"); 正则表达式r=新正则表达式(“此文件名”); 但是每次我都会收到一个无效的参数错误。查看源文本的示例会很有帮助。但也许这有帮助 var

我正在写一个程序,需要搜索一个大的文本文档,以获取大量的单词集合。这些单词都是文件名,里面有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用Regex来搜索这些名称,如果是,应该使用什么类型的reg。我应该使用什么顺序?我试过了

Regex r = new Regex("?this\_file\_name"); 正则表达式r=新正则表达式(“此文件名”);
但是每次我都会收到一个无效的参数错误。

查看源文本的示例会很有帮助。但也许这有帮助

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
是不需要的。阅读它的文档。只有当您使用
^
和/或
$
时,它才起作用。