我需要一些帮助来创建一个正则表达式(在java中)来找到类似的模式:
(30.6284, -27.3493)
这大致是纬度经度对。从较小的部分建造,我想出了这个:
String def = "\\((\\-?\\d+\\.\\d+),\\s*(\\-?\\d+\\.\\d+)\\)";
如果我在括号之前或之后没有任何字符,那么可以正常工作。所以这失败了:
"hello (30.6284, -27.3493) "
但如果我删除之前的“hello”和尾随空格,它就会起作用。如何在表达式之前和之后忽略任何其他字符序列?
由于
答案 0 :(得分:0)
String s = "hello (30.6284, -27.3493) ";
System.out.println(s.replaceAll(".*(\\((\\-?\\d+\\.\\d+),\\s*(\\-?\\d+\\.\\d+)\\)).*","$1"));
输出: (30.6284,-27.3493)
请注意,如果您要循环查找内容,我会使用以下内容:
Matcher m = Pattern.compile(".*(\\((\\-?\\d+\\.\\d+),\\s*(\\-?\\d+\\.\\d+)\\)).*").matcher(s);
while(m.find()){
System.out.println(m.start()+ " " + m.group(1));
}
答案 1 :(得分:0)
我使用此网站提出了这个问题:http://regexpal.com/和http://www.regextester.com/
\(-?\d+\.?\d+, -?\d+\.?\d+\)
这将匹配,但不会捕获,可能不是您的语言特定格式(但应该很容易修改。为了支持捕获,您可以使用这个:
\((-?\d+\.?\d+), (-?\d+\.?\d+)\)
答案 2 :(得分:0)
您可以使用以下代码在文本中查找和提取模式的多个实例。
String def = "\\((\\-?\\d+\\.\\d+),\\s*(\\-?\\d+\\.\\d+)\\)";
String text = "hello (30.6284, -27.3493) (30.6284, -27.3493) ";
Pattern p = Pattern.compile(def);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println(text.substring(m.start(), m.end()));
}