2014-05-24 45 views
0

我需要幫助才能知道如何在Java中引用正則表達式的一部分。 例子:我有這樣一個文本:。提取正則表達式的一部分java

「讓·穆蘭 - 奧爾良門 - 巴黎14E 讓穆蘭公寓37平方米在2013年的材料和優質的服務,翻新大客廳與廚房,獨立的臥室區,更衣室,廁所/水槽,大型淋浴間,洗手池,水槽和洗衣機設備,大理石地板,雙層玻璃窗聲音,安靜,功能齊全,空間寬敞。 。 €310000

房間:2個 臥室:1 表面:37平方米 「

而我只需要帶有標記「房間」的房間的數量我該怎麼辦? 我知道這一點:

Pattern p; 
Matcher m; 
p= Pattern.compile("Rooms: +[0-9]"); 

,但我只想要多少,我想刪除「房間:」從結果。

第二個問題,如何用一個正則表達式來取這個城市的名字,因爲如果我有很多不同城市名稱的文本:像巴黎,倫敦,里昂,羅馬等等......我如何可以做一個正則表達式來做到這一點?

+0

使用回顧後匹配,但不提取 –

+0

http://docs.oracle.com/javase/tutorial /essential/regex/groups.html – Pshemo

回答

0

我只想要號碼,我想從結果中刪除「房間:」。

使用Matcher#group()得到附上的用於啓用正則表達式語句的分組括號內()匹配的組。

這裏group(1)返回(\\d+)如果找到。

示例代碼:

Pattern pattern = Pattern.compile("Rooms:\\s+(\\d+)"); 
    Matcher matcher = pattern.matcher("Rooms: 2 Bedrooms: 1 Surface: 37 m² "); 

    if (matcher.find()) { 
     System.out.println(matcher.group(1)); // output 2 only 
    } 

請看看Java Regex Pattern,所有的模式進行了詳細解釋。發現這裏的示例代碼上Java Tutorials - Quantifiers

+0

你可能想把'+'放在組裏面。否則,組將只包含最後匹配的數字。 – Pshemo

+0

謝謝你的回答如此之快!有用!! 對於第二個問題,你有想法嗎? – user51324

+0

獲取兩個連字符後的單詞。你可以使用'string.indexOf(' - ')'。 – Braj

0

使用replaceAll()一回參考,提取它在同一行:

String rooms = input.replaceAll("(?is).*\\brooms\\s+(\\d+).*", "$1");