我遇到的情況,我必須多次找到某些詞文字,一遍又一遍。 我已經目前使用了一系列的正則表達式在這樣的格式...
"((^)|(\W))(?<c>Word1)((\W)|($))"
"((^)|(\W))(?<c>NextWord)((\W)|($))"
"((^)|(\W))(?<c>AnotherWord)((\W)|($))"
...
正則表達式的這對象列表是他們通過循環使用的數據塊和匹配是(一個循環爲一個正則表達式。匹配(數據)調用)
我已經盡我所能來優化它們,比如先編譯它們。
然而,列表的時間越來越長,我決定開始製作更大的編譯正則表達式來優化過程。如...
"((^)|(\W))(?<c>((Word1)|(NextWord)|(AnotherWord)))((\W)|($))"
這提供了一個巨大的速度imporvement,但有一個副作用,我無法弄清楚如何糾正。
當單詞在數據中並排(如空格分隔,例如「Word1 NextWord AnotherWord」)時,由於「Word1」的正則表達式還包含尾部空格,因此在捕獲中會丟失第二個單詞。 「NextWord」可能發生的匹配不再具有領先的空間,因爲它是前一場比賽的一部分。
問題
誰能改變這個正則表達式(.NET格式)
Pattern = "((^)|(\W))(?<c>((Word1)|(NextWord)|(AnotherWord)))((\W)|($))"
工作來捕獲在這個列表中的所有單詞下面一個調用」 .matches(數據)「 其中
data = "Word1 NextWord AnotherWord"
? (在不犧牲效率增益)
成績
只是想我要提到這一點。在應用建議的答案/校正後,我將看到後面的內容,我現在知道如何使用:),我剛剛修改的代碼速度提高了347倍(舊測試速度的0.00347%)。當你進入多個表達式時,這是最初要記住的東西。很高興。
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –