2012-09-25 58 views
2

我要評估類似如下的表達式:獲得一個正則表達式匹配的詞嗎?

這是街道藍

您可以使用正則表達式有點粗糙如下決定顏色:

? (青|綠|藍|藍)

到目前爲止好,但是,我怎麼能確定導致顏色的對象?也就是說,在這種情況下,我想回收「街道」一詞,但它可能是「汽車」,「箭頭」或任何其他名詞。

簡而言之,是否可以構造一個正則表達式,該正則表達式一旦找到了特定的點(數學)(在這種情況下爲顏色),就可以得到最後一個單詞,它對應於應用顏色的對象,或者是否一樣,正則表達式找到匹配前的單詞?

+2

爲什麼不只是色彩搭配,即'([^ \ S +])\ S +(青色|綠色|紅色|藍)之前添加其他匹配塊'? – 2012-09-25 13:39:02

+3

@JackManey,你可能想要移動你的第一個'+'。 :c) – FrankieTheKneeMan

+1

@FrankieTheKneeMan - 哎呀,對吧。不幸的是,編輯它爲時已晚......所以,對於OP,正則表達式應該是'([^ \ s] +)\ s +(青|綠|藍|藍)''。 – 2012-09-25 13:46:17

回答

2

以下的正則表達式應該工作:

(\w+)\s+(blue|green|cyan) 

顏色賽前的話將是捕獲組1

Java測試:

Pattern p = Pattern.compile("(\\w+)\\s+(blue|green|cyan)"); 
Matcher matcher = p.matcher("This is the street blue"); 
if(matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 
+0

你甚至不需要第一個'\ s +',是嗎? –

+1

是真的,你沒有。這也不適用於所有情況。 – dogbane

0

這個表達式最適合你在找的東西,當然需要進一步的數據處理,但它確實很有用。

謝謝大家對您的意見