0

次のようなパターンを見つけるために(Javaで)正規表現を作成するのに助けが必要です:

(30.6284, -27.3493)

おおよそ緯度と経度のペアです。小さなピースから構築して、私はこれを思いつきました:

String def = "\\((\\-?\\d+\\.\\d+),\\s*(\\-?\\d+\\.\\d+)\\)";

括弧の前後に文字がなくても問題ありません。したがって、これは失敗します:

"hello (30.6284, -27.3493)   "

ただし、前の「こんにちは」と末尾の空白を削除すると機能します。式の前後にあるその他の文字列を無視するにはどうすればよいですか?

ありがとう

4

3 に答える 3

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()));
    }
于 2013-06-15T06:01:25.173 に答える
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));
}
于 2013-06-15T05:31:53.060 に答える
0

私はこのウェブサイトを使用してこれを思いつきました: http://regexpal.com/およびhttp://www.regextester.com/

\(-?\d+\.?\d+, -?\d+\.?\d+\)

これは一致しますが、キャプチャではなく、おそらく言語固有の形式ではありません (ただし、簡単に変更できるはずです。キャプチャをサポートするには、次のものを使用できます。

\((-?\d+\.?\d+), (-?\d+\.?\d+)\)
于 2013-06-15T05:31:59.730 に答える