我尝试从网址中提取lat和long:
source: ...sensor=false¢er=-15.842208999999999%2C-48.023084&zoom=17&size=256x256&language=en&client=google-maps-frontend&signature=hbey3U4lycTNgX48asW8MODjJLM
我在正则表达式方面表现不佳,所以我使用了这个正则表达式测试器(http://regexpal.com/)并对此正则表达式进行了编码
-?\d{2}\.?\d{6}(适用于JAVA) )
它产生了这个结果(谁说它是regexpal.com):
-15.842208 ... -48.023084
所以当我这样做时(在java中):
for (Element element : newsHeadlines) {
if(element.toString().contains("https://maps.google.com")){
List<String> lista = get_matches(element.attr("content"), "-?\\d{2}\\.?\\d{6}");
}
}
public static List<String> get_matches(String s, String p) {
// returns all matches of p in s for first group in regular expression
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile(p).matcher(s);
while(m.find()) {
matches.add(m.group(1)); //<-- Exception m.group(1) not have any results.
}
return matches;
}
我的正则表达式有什么问题?
答案 0 :(得分:2)
答案 1 :(得分:1)
只需将一个符号设为可选,无论它是-
还是.
。
-\d{2}\.?\d{6}
等效的java正则表达式:
-\\d{2}\\.?\\d{6}
OR
-?\d{2}\.\d{6}
等效的java正则表达式:
-?\\d{2}\\.\\d{6}
并致电m.group(0)
仅打印匹配的字符串。如果要调用m.group(1)
,则需要将模式括在paranthesis中。