2008-12-12 37 views
2

我有一個很奇怪的問題。我有一個非常大的正則表達式在某些文本中搜索某些單詞(RegEx看起來像這樣:(?i)\b(a|b|c|d...)\b;等等,其中a,b,c,d代表單詞)。無論如何,我把它放在一個預編譯的程序集中以加快速度,然而問題在於,預編譯的正則表達式與同樣的正則表達式的非編譯版本不同。o_0編譯一個非常大的正則表達式

例如如果正則表達式是:(?i)\b(he|desk)\b並且我通過它傳遞「helpdesk」,預編譯版本會返回「lp」,這樣他和桌面上的文字就會被分離出來,就好像邊界條件完全不起作用,但是如果我的確使用完全相同正則表達式一個非預編譯版本,它的工作原理很好... 有誰知道我是否可能缺少任何東西?

感謝

(對不起使用VB.Net和C#)

+0

你在用什麼語言? – mat 2008-12-12 09:10:56

+0

請使用實際的正則表達式實現標記。 – 2008-12-12 09:13:42

+0

你是如何預編譯正則表達式的?你傳遞給Regex.CompileToAssembly的參數是什麼? – 2008-12-12 11:32:56

回答

0

你給了兩種不同的語言在那裏。所以也許有一些互動。

無論如何,我認爲一些簡短但完整的測試程序可能是爲了 - 在一些獨立的測試代碼中嘗試並重現問題,以便更容易推理。

也許沒有正則表達式的搜索會更有效率嗎?

0

我寫了兩個測試應用程序,一個在C#中,一個在VB.Net中都顯示相同的行爲。看來,我正在使用的正則表達式的預編譯版本忽略了某些單詞的邊界條件。我曾嘗試不使用正則表達式,但我在表達式中有3000多個單詞的列表,並且經過一些測試後,它似乎是最好的解決方案,唯一的是我不希望它在我的主代碼中,並且希望它在編譯的程序集預...

感謝

1

既然你正在尋找完整的單詞,如何尋找\w+,並檢查是否這個詞是一個收藏。基於散列的集合或哈希映射在這裏可以很好地工作。如果需要出現,這種方法可以更容易地更新清單。