2016-06-16 8 views
0

私はしばらくの間この作業を続けてきました。理由は、私はあなたがtoString Javaオブジェクトを取得し、私はオブジェクトにそれをシリアル化しようとしている出力を取得しています。それは単一のオブジェクトだった場合、それは簡単だろうが、私はリストを持って、私はリスト内のすべての1つをキャプチャしたい。同じ文字列を単一の文字列にマッチさせてリストに変換する

だからオブジェクト

リスト(AcquireRequest(X2、x3,1466008848103,5,5,5、どんな、リスト(リソース割り当て(アロケーション、5)、 リソース割り当て(Lolication、25)))、 AcquireRequest(x2、x3,1466008848103,5,5,5、what、List(ResourceAllocation(allocation、5)、 ResourceAllocation(Lolication、25)))、 AcquireRequest(x2、x3,1466008848103,5,5,5,5 、何でも、List(ResourceAllocation(allocation、5)、 ResourceAllocation(Lolication、555)))))

これは内部にいくつかのフィールドの文字列や数字とList of Anotherオブジェクトを持つAcquireRequestオブジェクトのリストです。私が欲しいのは、AcquireRequest文字列を個々に一致させることで、結果的にAcquireRequestを使ってList(String)という結果を得ることです。

私はパターンマッチングを試みました、Javaマッチャーなどを使用しました。

自分でいくつかの正規表現の試み:

(AcquireRequest((=、\ s)は(=、)\ D *(=、)\ D *(=、。?。??? )\ dは*(=、)\ D *(=、)(=、)(=)))(=、|??????))

AcquireRequest(()。 、(。)、(\ D *)、(\ D *)、(\ D *)、(\ D *)、(。?)、(。))

AcquireRequest((。+ ))

最初の試みは現在の試みですが、外部のList()を除いてすべて一致しています。 AcquireRequest式の後に、別の要素が来ていることを意味する「、」か、それが最後であることを意味するので、私はちょうど先読みが必要だと思った。

ありがとうございました!

+3

私はregexを使用しないことをお勧めします。さらに、シリアル化用に設計されていないJavaの 'String'表現ではなく、業界標準の直列化形式(バイナリ、JSON、XML)を使用することをお勧めします。 – Mena

+0

ええ、私はあなたに完全に同意する、私はこれは単純な解決策だと思ったが、それはしばらくしていないことを理解した。私は単純なパターンマッチングを使用してマーシャル/マルマーシャルの90%を持っていますが、この1つのケースはRegexでは動作しません。私はjsonのlibに移動しますが、私は問題を起こさせることができないこれらの人々の1人であり、私はこの時間を失いました。とにかくこれが正規表現を使ってできるかどうかを理解する必要があります –

+0

これは先読みでは可能ですが、どうしたらいいのかは分かりません。 –

答えて

1

1つの正規表現にする必要はありますか?どのようにこのようなものについて:これは、括弧やカンマが含まれていない、あなたのデータに文字列値限り、動作するはずです

string 
    .replaceAll("""\w+?\(|\)+""", "") 
    .split(",\\s*") 
    .grouped(11) 

。しかし、もしそうすれば、あなたはとにかくねじれてしまいます。正規表現の解法はありません。真の構文解析ツールが必要です。

最後のコメント(内部のリストは可変サイズであることによる)に対する応答です。 私は実際に完全な解決策を提供するつもりはありませんでした。(あなたはfreelancer.comでコードを書いて、正確な仕様にすることができないかもしれません)、まさに正しい方向を指し示したかったのです。しかし、これはどうですか:

string 
    .split("""\({2,},?\s*""") 
    .map { _.replaceAll("""\w+?\(|\)+""", "").split(",\\s*") } 
+0

それは1である必要はありません。しかし、私はAcquireRequest構造体を分離したい。私があなたのコードを実行したときに得たものは、すべての構造体からの個々のフィールドのリストでした。合計33個の要素が必要でした。 –

+0

うん。私は今ほとんどそれを得た。残っている唯一の事は、置き換えと分割が文字列の前に空のスペースを持つフィールドを残していることです。それをトリミングするだけでいいです。 –

+0

スペースを削除するために再度編集しました。 – Dima

関連する問題