预编译一个非常大的正则表达式

时间:2008-12-12 09:07:15

标签: c# vb.net regex compiled

我有一个非常奇怪的问题。我有一个非常大的正则表达式搜索某些文本中的某些单词(RegEx看起来像这样:(?i)\b(a|b|c|d...)\b;等等,其中a,b,c,d代表单词)。无论如何,我把它放在预编译的程序集中以加快速度,但问题是预编译的正则表达式与同一正则表达式的非编译版本的工作方式不同... o_0

例如,如果正则表达式是:(?i)\b(he|desk)\b并且我通过它“帮助台”,则预编译版本返回“lp”,因此他和桌面的单词被条带化,好像边界条件根本不起作用,但是,如果我使用完全相同的正则表达式非预编译版本它工作得很好...... 有谁知道我是否会遗漏任何东西?

由于

(抱歉使用VB.Net和C#)

3 个答案:

答案 0 :(得分:1)

由于您正在搜索整个单词,如何搜索\w+,并检查该单词是否在集合中。基于散列的集合或散列映射在这里可以很好地工作。如果需要,这种方法可以更容易地更新列表。

答案 1 :(得分:0)

你在那里给了两种不同的语言。所以也许有一些互动。

在任何情况下,我认为一些简短但完整的测试程序可能是有序的 - 尝试在一些独立的测试代码中重现问题,以便更容易推理。

在没有正则表达式的情况下进行搜索会更有效吗?

答案 2 :(得分:0)

我编写了两个测试应用程序,一个在C#中,另一个在VB.Net中,它们都表现出相同的行为。似乎我使用的正则表达式的预编译版本忽略了某些单词的边界条件。我试过不使用正则表达式,但我在表达式中有一个3000+单词的列表,经过一些测试后,它似乎是最好的解决方案,唯一的问题是我不希望它在我的主代码中并且更愿意将它放入预编译的程序集......

由于