2016-04-22 59 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