我要評估類似如下的表達式:獲得一個正則表達式匹配的詞嗎?
這是街道藍
您可以使用正則表達式有點粗糙如下決定顏色:
? (青|綠|藍|藍)
到目前爲止好,但是,我怎麼能確定導致顏色的對象?也就是說,在這種情況下,我想回收「街道」一詞,但它可能是「汽車」,「箭頭」或任何其他名詞。
簡而言之,是否可以構造一個正則表達式,該正則表達式一旦找到了特定的點(數學)(在這種情況下爲顏色),就可以得到最後一個單詞,它對應於應用顏色的對象,或者是否一樣,正則表達式找到匹配前的單詞?
我要評估類似如下的表達式:獲得一個正則表達式匹配的詞嗎?
這是街道藍
您可以使用正則表達式有點粗糙如下決定顏色:
? (青|綠|藍|藍)
到目前爲止好,但是,我怎麼能確定導致顏色的對象?也就是說,在這種情況下,我想回收「街道」一詞,但它可能是「汽車」,「箭頭」或任何其他名詞。
簡而言之,是否可以構造一個正則表達式,該正則表達式一旦找到了特定的點(數學)(在這種情況下爲顏色),就可以得到最後一個單詞,它對應於應用顏色的對象,或者是否一樣,正則表達式找到匹配前的單詞?
以下的正則表達式應該工作:
(\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));
}
你甚至不需要第一個'\ s +',是嗎? –
是真的,你沒有。這也不適用於所有情況。 – dogbane
使用word boundaries得到了這個詞顏色前(與lookahead):
/\b.+\b(?=\s+(cyan|green|red|blue))/
這個表達式最適合你在找的東西,當然需要進一步的數據處理,但它確實很有用。
謝謝大家對您的意見
爲什麼不只是色彩搭配,即'([^ \ S +])\ S +(青色|綠色|紅色|藍)之前添加其他匹配塊'? – 2012-09-25 13:39:02
@JackManey,你可能想要移動你的第一個'+'。 :c) – FrankieTheKneeMan
@FrankieTheKneeMan - 哎呀,對吧。不幸的是,編輯它爲時已晚......所以,對於OP,正則表達式應該是'([^ \ s] +)\ s +(青|綠|藍|藍)''。 – 2012-09-25 13:46:17