2011-02-03 17 views
0

我有一個問題,我需要標記我的字符串(使用java代碼),以便它被分成一個字符串數組。此陣列中的每個令牌應該是我嘗試作爲實現代碼字,數字或形式(23×34 X 56,等等)的尺寸:正則表達式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

你也可以發佈樣本輸入和期望的輸出。 – 2011-02-03 11:06:04

+2

只是一個提示:粘貼你的正則表達式在http://www.strfriend.com/圖形化可視化。不時幫助我很多。 – 2011-02-03 11:08:04

+1

@Rodrigo:那個鏈接非常棒, +1 – 2011-02-03 11:12:14

回答

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 - 一個偉大的網站進行測試。

您可能想要用\p{L}替換\w以覆蓋java中的所有Unicode字。

0

String.split返回字符串的數組

split_text數組:

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

對不起,錯字較早... split_text是一個數組。 – assassin 2011-02-03 11:10:44

0

我沒有看到一個語法錯誤在你的正則表達式,但也存在一些問題:

  • 空白在正則表達式顯著,所以不要在正則表達式中將空格放在字符串中。
  • 使用\.來匹配文字點。
  • (\d{3},)*\d{3}([.]\\d)*將匹配123,456,789.1.1.1.1而不是1,234.67。這真的是你想要的嗎?
  • <number> x <number>只會匹配成對的數字,而不是像你的例子中的三元組。

我認爲最好是稍微更新規格。什麼究竟是你/你不想匹配。舉幾個例子。考慮角落案例(是否允許前導零?可以丟棄,如.12?等等如何)...