查找具有正则表达式的任何文字

时间:2009-10-23 13:35:38

标签: c# regex

在我的C#程序中,我有一个正则表达式textparser,它可以找到所有出现的双方括号括起来的单词。例如,[[anything]]会找到任何单词。

在第二步中,我想计算在整个文本中出现的单词(在我的例子中:任何东西)的频率。为此,我尝试创建一个包含找到的单词和计数的RE,我得到了多少匹配。问题是,找到的单词还可以包含特殊字符和以下正则表达式:

string foundWord = "(anything";
Regex countOccurences = new Regex(foundWord);
当变量包含像'(''这样的特殊字符时,

显然会失败。 Expresso建议使用以下结构匹配整个表达式:

Regex countOccurences = new Regex("(?(" + foundWord + ")Yes|No)");

但是当在这种情况下,foundWord是一个数字,比如'2009',RE试图将它解释为对一个组的引用(显然没有定义)。在我的文本中,可以有普通字符,特殊字符,数字等的任意组合。

如何告诉RE仅将给定字符串解释为文字表达式?

提前致谢, 弗兰克

2 个答案:

答案 0 :(得分:6)

您应该使用Regex.Escape

在使用它构建正则表达式之前转义文字

类似的东西:

Regex countOccurances = new Regex(Regex.Escape(foundWord));

然而,由于您所做的只是计算出现次数,因此更好的选择是避免使用正则表达式进行第二次搜索。由于您不关心任何特殊字符,因此只进行纯文本搜索会更容易。

答案 1 :(得分:1)

如果您只是想计算一个字符串的出现次数,为什么要使用正则表达式呢?只需使用基本的字符串库,contains(),indexOf(),在C#中最有意义的东西。但是,如果你不需要正则表达式的奇特功能,为什么要使用正则表达式? 我想

int position = string.indexOf(foundString);
while(position != -1)
{
    count++;
    position = string.indexOf(foundString, position + 1);
}

可以在没有正则表达式的情况下完成它。