【问题标题】:C# regular expressions - matching whole words?C# 正则表达式 - 匹配整个单词?
【发布时间】:2009-02-07 02:07:02
【问题描述】:

我正在编写一个程序,该程序需要在 LARGE 文本文档中搜索大量单词。这些词都是文件名,其中带有下划线(例如,this_file_name)。我知道如何打开和遍历文本文档,但我很好奇是否应该使用 Regex 来搜索这些名称,如果是,应该使用哪种 reg。前任。我应该使用序列吗?我试过了

正则表达式 r = new Regex("?this\_file\_name");

但我每次都得到一个无效的参数错误。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 不需要多行修饰符。
    • 正如 Alan 指出的那样,不需要RegexOptions.Multiline。阅读它的文档。仅当您使用 ^ 和/或 $ 时才会有所不同。
    【解决方案2】:

    也许通过首先拆分空格或非单词字符将您的文档分解为标记?

    之后,我认为可能适合您的正则表达式看起来像这样:

    Regex r = new Regex(@"([\w_]+)");

    【讨论】:

      【解决方案3】:

      如果我正确理解您的问题,我认为正则表达式是不适合这项工作的工具。我假设您的文件名用某种分隔符(如逗号或换行符)分隔。

      如果是这种情况,请使用String.Split 将所有文件名放入一个数组中,按字母顺序对数组进行排序,然后针对您提到的“集合”中的每个项目对排序后的数组执行二进制搜索。我很确定这是执行任务的计算效率最高的方式。

      当您说“大”文本文件时,请考虑它们相对于运行该程序的机器的大小。 1 MB 的文本文件可能看起来很大,但它很容易放入具有 2 GB RAM 的机器的内存中。如果该文件与您的客户端计算机的内存相比要大得多,请一次读取该文件。这称为缓冲。

      【讨论】:

        猜你喜欢
        • 2011-08-07
        • 2010-11-15
        • 2012-01-06
        • 2017-07-08
        相关资源
        最近更新 更多