我正在尝试使用以下数据中的正则表达式提取X和Y组件:
{"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.]*)\"");
这应该很简单,但过去2个小时我一直被困在这里。
答案 0 :(得分:1)
此RegEx将起作用:
"X":"([0-9.]*)","Y":"([0-9.]*)"
1st
捕获组包含X
值, 2nd
捕获组包含Y
值
这意味着您的Pattern.compile
应为:
Pattern.compile("\"X\":\"([0-9.]*)\",\"Y\":\"([0-9.]*)\"");
请注意,您可能需要在RegEx开头添加.*
才能使其正常工作。
答案 1 :(得分:1)
如果您希望正则表达式解析它,那么您可以使用:
"X":"(\d+(?:\.\d+)?)","Y":"(\d+(?:\.\d+)?)"
<强> Regex Demo 强>
你的正则表达式中X后面缺少引号("
)。虽然我建议不要使用正则表达式,因为它也会匹配1.1.2.3
在 JAVA :
\"X\":\"(\\d+(?:\\.\\d+)?)\",\"Y\":\"(\\d+(?:\\.\\d+)?)\"
答案 2 :(得分:-1)
对于那些遇到同样问题的人来说,前端/末端需要。*的原因是因为我使用了错误的方法调用。
根据http://developer.android.com/reference/java/util/regex/Matcher.html#matches()
public boolean matches()
在API级别1中添加尝试将模式与整个模式匹配 区域(或整个输入,如果没有设置区域)。
需要匹配整个区域。
要做任何匹配,我需要使用find()代替。
public boolean find()
在API级别1中添加移动到下一个模式中 输入。如果先前的匹配成功,则该方法继续 从输入中匹配后的第一个字符进行搜索。 否则它会从区域开始搜索(如果有的话) 设置),或从位置0。
希望这对其他人有用。
String.matches()为matches()方法http://developer.android.com/reference/java/lang/String.html
提供了更多见解public boolean matches(String regularExpression)
此方法仅在常规时返回true expression匹配整个输入字符串。一个常见的错误是 假设此方法的行为类似于contains(CharSequence);如果你 想要匹配输入字符串中的任何位置,您需要添加。* 正则表达式的开头和结尾。见匹配(String, CharSequence的)。