0

文字列を文字列配列に分割するために(Javaコードを使用して)文字列をトークン化する必要があるという問題があります。この配列の各トークンは、単語、数字、またはフォームの次元(23 x 34 x 56など)のいずれかである必要があります。これを次のようにコーディングしようとしました。

String[] split_text = text.split("\\s | (\\d{3},)*\\d{3}([.]\\d)* x (\\d{3},)*\\d{3}([.]\\d)* | \\d*([.]\\d)* x \\d*([.]\\d)*");

しかし、これは構文エラーを引き起こしています。正規表現を使用してこれを行う方法と、Javaで正規表現を表現する方法に問題があるかどうかを教えてもらえますか?

4

3 に答える 3

1

ドットまたはコンマと x を真ん中に持つ数値のペアを一致させるには、次のようにします。

(\d*(?:[.,]\d+)* x \d*(?:[.,]\d+)*)

またはペアとトリプルの場合:

(\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})

だから多分それはあなたの表現です:

((?:\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})|\s|\w+)

ここを参照してください: http://rubular.com/r/snAiI7GMT7 - テストに最適なサイトです。

Java のすべての Unicode ワードをカバーするために、\wをに置き換えることができます。\p{L}

于 2011-02-03T12:02:50.193 に答える
0

String.splitは、文字列の配列を返します。

配列をsplit_text作成します。

String[] split_text = ...
      ^^
于 2011-02-03T11:08:28.987 に答える
0

正規表現に構文エラーは表示されませんが、いくつかの問題があります。

  • 正規表現では空白が重要であるため、文字列で予期しない場所にスペースを入れないでください
  • \.リテラルドットと一致させるために使用します。
  • (\d{3},)*\d{3}([.]\\d)*一致しますが、一致123,456,789.1.1.1.1しません1,234.67。それは本当にあなたが意図したことですか?
  • <number> x <number>例のようにトリプレットではなく、数値のペアにのみ一致します。

仕様を少し更新しておくのが一番いいと思います。正確に何を一致させたい/一致させたくないのか。いくつか例を挙げてください。コーナーケースについて考えてみてください(先行ゼロは許可されていますか?のように削除できます.12か?どうですか?1.4E-45など)...

于 2011-02-03T11:09:23.997 に答える