2

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

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

谢谢

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

4

3 回答 3

1

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

于 2008-12-12T10:14:40.040 回答
0

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

无论如何,我认为可能需要一些简短但完整的测试程序 - 尝试在一些独立的测试代码中重现问题,以便更容易推理。

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

于 2008-12-12T09:25:28.703 回答
0

我编写了两个测试应用程序,一个在 C# 中,一个在 VB.Net 中,两者都表现出相同的行为。我正在使用的正则表达式的预编译版本似乎忽略了某些单词的边界条件。我试过不使用正则表达式,但我在表达式中有一个 3000 多个单词的列表,经过一些测试,它似乎是最好的解决方案,唯一的事情是我不想在我的主代码中使用它,而是希望将它包含在一个预编译的程序集...

谢谢

于 2008-12-12T09:31:53.247 回答