如何忽略我的模式之前和之后的字符?

时间:2013-06-15 05:19:52

标签: java regex string

我需要一些帮助来创建一个正则表达式(在java中)来找到类似的模式:

(30.6284, -27.3493)

这大致是纬度经度对。从较小的部分建造,我想出了这个:

String def = "\\((\\-?\\d+\\.\\d+),\\s*(\\-?\\d+\\.\\d+)\\)";
如果我在括号之前或之后没有任何字符,那么

可以正常工作。所以这失败了:

"hello (30.6284, -27.3493)   "

但如果我删除之前的“hello”和尾随空格,它就会起作用。如何在表达式之前和之后忽略任何其他字符序列?

由于

3 个答案:

答案 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()));
    }