2016-03-01 47 views
0

我試圖學習如何正確使用正則表達式,但不知道我要出錯的地方。我試圖從forecast.io API中提取溫度,最高溫度,最低溫度和圖標。該圖標似乎是導致問題的參數,因爲所有其他參數在刪除時都能正常工作。對於圖標,我想提取包括短劃線(即部分陰天,雨,雪,...)在內的任何單詞。 API中參數的出現順序與它們在正則表達式中調用的方式相匹配。通過正則表達式從預測API中提取參數Java

有問題的正則表達式

String re = ".*icon\":([\\-a-zA-Z]+),.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*"; 

一個例子預測串在這裏可以看到:https://api.forecast.io/forecast/e7588e2bd6966bc7f41614e2955c5978/37.8267,-122.423

,我使用被進一步限制,使得僅示出了每個屬性的第一個實例中的字符串(即在這個例子中有多個「圖標」的情況下,我將使用的字符串將只有一個實例。)

有誰能告訴我什麼是錯誤的expr分裂國家?

+0

我們需要確切的文本測試正則表達式。 – Prashant

+0

這似乎凌亂。放下實際的字符串和匹配規則。 – 2016-03-01 04:20:03

+0

也許這不是文中的第一行?嘗試使用'「(?s)替換'」。* icon' *圖標' –

回答

0

你忘了周圍的圖標添加支架安裝到您的正則表達式:

String re = ".*icon\":\"([\\-a-zA-Z]+)\",.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*"; 

但我還是推薦使用Gson解析JSON:

JsonObject root = new JsonParser().parse(jsonStr).getAsJsonObject(); 
JsonArray dayArr = root.getAsJsonObject("daily").getAsJsonArray("data"); 
for (JsonElement elem : dayArr) { 
    JsonObject elemObj = elem.getAsJsonObject(); 
    System.out.println(elemObj.getAsJsonPrimitive("icon") + "\t" + 
      elemObj.getAsJsonPrimitive("temperatureMin") + "\t" + 
      elemObj.getAsJsonPrimitive("temperatureMax")); 
} 
+0

您的建議添加括號工作。非常感謝!我一直在努力試圖讓這個工作好幾天。 – Jess

0

使用波紋管的正則表達式

String re = "\"(temperature|temperatureMin|temperatureMax)\":[0-9]+(\.)?[0-9]*|\"icon\":\"([a-zA-Z]|-)+\""; 

這裏
(。)指的0或1發生。
[0-9] +表示1或者更多的數字
多發生 [0-9] *表示0或數字更出現

+0

這不起作用,因爲我還需要能夠捕獲負溫度(「 - 」字面)。再一次,溫度保持原樣,它只是我遇到問題的圖標。 – Jess