1

正規表現を使用して変換する方法はありますか?
M134.02,43.35c-12.62,1.4-29.25,6.59-39.85,19.65l15.35-5.82c26.24-18.1,54.45-10.65,62.99-0.11l1.27,1.34l0.02-0.04C169.6,49.83,155.11,41.01,134.02,43.35

の中へ:

["M", 134.02, 43.35],
["c", -12.62, 1.4, -29.25, 6.59, -39.85, 19.65],
["l", 15.35, -5.82]
// and so on...

私は現在、この正規表現を設定しています。
([a-zA-Z])(-?(\d+(\.\d+)?),?)+

ただし、次のように置き換えます。
["$1", $2]\n

最後の桁の値のみを取得するため、次のようになります。

["M", 43.35],
["c", 19.65],
["l", -5.82],
["c", -0.11],
["l", 1.34],
["l", -0.04],
["C", 43.35],

ええと、私は1つの正規表現でそれを行う必要はありません(ただし、推奨されます)。IDEを利用してhttp://readysetraphael.com/で生成された文字列パスを配列パスFind & Replace + Regexに変換することを楽しみにしています。

私のIDEはphpStormなので、Javaに適した正規表現パターンが必要だと思います。私はJava開発者ではないので、そこにどのような追加オプションがあるのか​​わかりません。

4

2 に答える 2

3

おそらく、そのような特定の正規表現は必要ありません。試す

String s = "M134.02,43.35c-12.62,1.4-29.25,6.59-39.85,19.65l15.35-5.82c26.24-18.1,54.45-10.65,62.99-0.11l1.27,1.34l0.02-0.04C169.6,49.83,155.11,41.01,134.02,43.35";
s = s.replaceAll("(\\d)-", "$1,-").replaceAll("([a-zA-Z])([^a-zA-Z]+)", "[\"$1\", $2]\n");
System.out.println(s);

プリント

["M", 134.02,43.35]
["c", -12.62,1.4,-29.25,6.59,-39.85,19.65]
["l", 15.35,-5.82]
["c", 26.24,-18.1,54.45,-10.65,62.99,-0.11]
["l", 1.27,1.34]
["l", 0.02,-0.04]
["C", 169.6,49.83,155.11,41.01,134.02,43.35]
于 2012-11-28T09:59:36.793 に答える
0

あなたはほとんどそれを手に入れました。2番目の用語を追加の中括弧で囲むだけで、すべての数値を取得できます

([a-zA-Z])((?:-?(?:\d+(?:\.\d+)?),?)+)

部分式の不要なキャプチャを回避するために、additional(...)をに変更しました。(?:...)

グループをキャプチャするためのテストケース:

public class CaptureTest {
    public static void main(String[] args) {
        String s = "M134.02,43.35c-12.62,1.4-29.25,6.59-39.85,19.65l15.35-5.82c26.24-18.1,54.45-10.65,62.99-0.11l1.27,1.34l0.02-0.04C169.6,49.83,155.11,41.01,134.02,43.35";
        String t = s.replaceAll("([a-zA-Z])((?:-?(?:\\d+(?:\\.\\d+)?),?)+)", "[\"$1\", $2],");
        System.out.println(s);
        System.out.println(t);
    }
}

と出力

M134.02,43.35c-12.62,1.4-29.25,6.59-39.85,19.65l15.35-5.82c26.24-18.1,54.45-10.65,62.99-0.11l1.27,1.34l0.02-0.04C169.6,49.83,155.11,41.01,134.02,43.35  
["M", 134.02,43.35],["c", -12.62,1.4-29.25,6.59-39.85,19.65],["l", 15.35-5.82],["c", 26.24-18.1,54.45-10.65,62.99-0.11],["l", 1.27,1.34],["l", 0.02-0.04],["C", 169.6,49.83,155.11,41.01,134.02,43.35],

これはjava -version

javaバージョン"1.7.0_03"
OpenJDKランタイム環境(IcedTea7 2.1.1pre)(7〜u3-2.1.1〜pre1-1ubuntu2)
OpenJDK 64ビットサーバーVM(ビルド22.0-b10、混合モード)

于 2012-11-28T10:03:58.663 に答える