2011-02-03 14 views
0

私は文字列配列に分割されるように(Javaコードを使用して)文字列をトークン化する必要があるという問題があります。このアレイ内の各トークンは、フォーム(X 34 X 56 23、等)の単語、数または大きさのいずれかでなければならない私はこれをコーディングしようとした:Javaの正規表現

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

しかし、これは、構文エラーを与えています。誰でも正規表現を使用してこれを行う方法と、正規表現をJavaで表現した方法に問題があるかどうかを教えてください。

+0

サンプル入力と予想される出力を投稿することもできます。 –

+2

ちょうどヒント:http://www.strfriend.com/に正規表現を貼り付けて、グラフィカルに視覚化してください。時々私に多くの助けになります。 –

+1

@Rodrigo:そのリンクは非常に素晴らしいです。 +1 –

答えて

1

ドットまたはコンマで任意の数のペアを一致させ、

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

またはペア、トリプルのために:

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

ので、多分あなたの表現のthats:

((?:\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})|\s|\w+) 
このような何かを行うことができます

ここをクリックしてください:http://rubular.com/r/snAiI7GMT7 - テストのための素晴らしいサイト。

\w\p{L}に置き換えて、javaのすべてのユニコードワードをカバーしたい場合があります。

+0

ありがとう!コンマが3桁ごとにしかなければならないという追加の制約を組み込むように変更する必要があります。 – assassin

0

String.splitの配列を返します。

split_text配列してください:私はあなたの正規表現の構文エラーが表示されていないが、いくつか問題がある

String[] split_text = ... 
     ^^ 
+0

以前のタイプミスは申し訳ありません... split_textは配列です。 – assassin

0

を:

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

仕様を少し更新するのが一番だと思います。何がちょうどあなた/あなたは一致しません。いくつかの例を挙げてください。コーナーケースを考えてみてください(0を許容していますか?.12のように落とすことができますか?1.4E-45など)...

+0

ありがとうございます...ええ、23.345 x 25.455 x 9032.232または234,232 x 234,2343(空白を含む)という形式の空白とサイズに合わせたいと思います。先頭のゼロは許され、.12の場合にも破棄することができます。したがって、その基本的に最も一般的なケースです。 – assassin

+0

また、一致したくない1。4E-45 – assassin

+0

桁区切り記号はオプションですか?正規表現が正しい場所にあるかどうかをチェックするか、それが正当なものかどうかを確認したいので、検証は不要ですか? –