2013-12-07 51 views
0

我想修改我當前的正則表達式,使其更加排他。使用正則表達式來提取所需的數據

這是我到目前爲止有:

RE.Pattern = "(L\d{1}-\w{2}-\w{4,7}-DATA-\d{3,4})" 

這樣做是提取字符串下面的例子從垃圾數據的加載。僅供參考這些字符串是不是靜態,數值等將在單元格之間改變。

L2-R2-TEST-DATA-4724 
L1-SR-TESTING-DATA-472 
L1-R2-WORKING-DATA-472 

上述字符串是我想要的東西,但也因爲這樣它也將提取以下數據:

L1-R2-WRONGON-DATA-4725 
L2-SR-RUBBISH-DATA-472 

這不是我所需要的,並想知道什麼,如果有的話,可以做,以修改我的正則表達式,以阻止這種情況發生...

我想知道是否有可能在原始正則表達式中以某種方式靜態定義說測試,測試和工作?所以我可以抓住他們,而不是WRONGON和垃圾。

+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1

您可以使用非捕獲組(?:來分隔要包含的單詞。此外其沒有必要有L\d{1},你可以簡單地使用L\d

RE.Pattern = "(L\d-\w{2}-(?:TEST(?:ING)?|WORKING)-DATA-\d{3,4})" 

Live demo

+0

非常感謝! – Chris

1

我不知道我理解你的問題,因爲你說字符串會改變,但你想知道你是否可以靜態地匹配特定的情況。

如果你只是想匹配TESTTESTINGWORKING,可以替換\w{4,7}(?:TEST|TESTING|WORKING),它顯然不會匹配WRONGONRUBBISH。如果你想匹配任何4-7個字符的字,除了後面兩個,這是一個不同的問題。