2016-04-22 57 views
0

我試圖使用從下面的數據正則表達式提取的X和Y分量:Reqular表達式與輸入包含[] {}」

{"SearchResults":[{"PageCount":"0"}, 
{"SEARCHVAL":"530106","CATEGORY":"Building", 
    "X":"103.8907","Y":"1.3537"}]} 

這是我試圖無圖案果:

Pattern p1 = Pattern.compile("\\\"X:\\\"([0-9.]*)\\\",\\\"Y\\\":\"([0-9.]*)\\\""); 

Matcher m1 = p1.match(result); 
if(m1.matches()){ 
    print("match found"); 
} 

我自己也嘗試沒有任何的運氣如下:

Pattern.compile("\"X:\"([0-9.]*)\",\"Y\":\"([0-9.]*)\""); 

這應該是EAS Ÿ,但我在這裏呆了兩個小時。

+1

不應該被解析爲json嗎? –

+2

你爲什麼使用正則表達式呢?你列出的字符串是一個簡單的JSON。你應該使用JSONObject/JSONArray來解析它。 –

+0

如果你想要正則表達式: - https://regex101.com/r/wE3dV6/1..in JAVA: - \「\」X \「:\」(\\ d +(?:\\。\\ d +)? )\「,\」Y \「:\」(\\ d +(?:\\。\\ d +)?)\「' – rock321987

回答

-1

爲他人所堅持的同樣的問題,之所以*需要在前面。 /結束是因爲我使用了錯誤的方法調用。根據http://developer.android.com/reference/java/util/regex/Matcher.html#matches()

公共布爾匹配()

在API級別1嘗試匹配針對整個 區域中的模式

(或整個輸入,如果沒有區域已被設置) 。

它需要匹配整個區域。

要做任何匹配,我需要使用find()來代替。

公共布爾查找()

在API級別1移動到圖案的下一個出現中 輸入。如果先前的匹配成功,則方法繼續從輸入中匹配後的第一個字符開始搜索 。 否則,無論是從區域開始搜索(如果已 集),或者從位置0

希望這是對別人有用。

String.matches()提供了更多的見解,以匹配()方法http://developer.android.com/reference/java/lang/String.html

公共布爾匹配(字符串正則表達式)

僅當正則表達式 整個輸入字符串匹配此方法返回true 。一個常見的錯誤是 假設這個方法的行爲像contains(CharSequence);如果你想在輸入字符串中的任何地方匹配 ,則需要在正則表達式的開始和結尾添加。*到 。查看匹配項(字符串, CharSequence)。

+0

您應該添加它作爲對問題的編輯。你正在說明爲什麼'。*'在正則表達式的開頭或結尾需要,它並不直接回答* Pattern *有什麼問題。由於這只是關於您最終使用的正則表達式的額外信息,您應該使用此信息編輯問題。我已將其標記爲*不是答案* – Druzion

1

這個表達式將工作:

"X":"([0-9.]*)","Y":"([0-9.]*)" 

1st捕獲組包含X值,2nd捕獲組包含Y

Live Demo on Regex101

這意味着你的Pattern.compile應該是:

Pattern.compile("\"X\":\"([0-9.]*)\",\"Y\":\"([0-9.]*)\""); 

請注意,您可能需要在正則表達式的開頭添加.*爲它工作。

+0

奇怪......我需要在開始時添加*。 p = Pattern.compile(「。* \」X \「:\」([0-9。] *)\「,\」Y \「:\」([0-9。] *)\「。* 「); –

+0

也許,是的。這將在'「X」'開始之前捕獲數據。它應該可以工作,因爲在RegEx開始時沒有'^'。哦,問題解決了! – Druzion

+0

@AngelKoh您應該將該編輯添加到問題中。我在答覆中加入了一些內容,但是違反規則去做你所嘗試的事情(所以我必須拒絕你的編輯) – Druzion

1

如果你想正則表達式來解析它,那麼你可以使用:

"X":"(\d+(?:\.\d+)?)","Y":"(\d+(?:\.\d+)?)" 

Regex Demo

你在你的正則表達式X之後失蹤報價(")。雖然我建議不要使用正則表達式,因爲它也將匹配1.1.2.3

JAVA

\"X\":\"(\\d+(?:\\.\\d+)?)\",\"Y\":\"(\\d+(?:\\.\\d+)?)\" 
+0

@Downvoter爲什麼downvote ?? – rock321987

+0

奇怪...我沒有倒下你。我很想知道你爲什麼低調。 –

+1

@AngelKoh有些人可能不喜歡用正則表達式來代替「JSON」解析器的想法 – rock321987