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

时间:2009-02-07 02:07:03

标签: c# regex

我正在编写一个程序,需要在大型文本文档中搜索大量单词。这些单词都是文件名,其中包含下划线(例如this_file_name)。我知道如何打开并遍历文本文档,但我很好奇是否应该使用正则表达式来搜索这些名称,如果是,那么是什么样的注册表。恩。我应该使用哪个序列?我试过了

Regex r = new Regex("?this\_file\_name");

但每次都会出现无效的参数错误。

3 个答案:

答案 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的机器的内存。如果文件与客户端计算机的内存相比要大得多,请一次以块的形式读取文件。这称为缓冲。