2017-09-19 29 views
1

分割字符串所以我需要拆分字符串:正則表達式:按名稱,重量/數量和價格

Laundry Detergent    2X Ultra Free Clear         50 oz   11.99 

分爲:

Laundry Detergent    2X Ultra Free Clear 

50 oz 

11.99 

我迄今爲止最好的是this。我知道它甚至不會使用這個 字符串,但它還有一些我需要分開的其他字符串。這是我無法解決的問題之一。

一些示例字符串:

Ravioli       Beef            15 oz   1 
Pear Halves      100% Juice           15 oz   1.3 
Gatorade       Sports Drink          8/20 oz  5.48 
+0

你有沒有發現在這個特定的模式?像數量和價格如何表示? (數字,帶小數,帶單位,最後......)。如果你沒有,那麼你太快發佈你的問題的方式。 – AxelH

+0

個人我只是分裂在字段delimeters(也許選項卡或多個空格),並根據需要重新格式化 –

+0

@ScaryWombat你會怎麼做呢? – Cow

回答

1

你可以試試這種方法:(run here

final String regex = "^((?:\\S+\\s?)+)\\s{2,}((?:\\S+\\s?)+)\\s{2,}((?:\\S+\\s?)+)\\s{2,}(\\d+(\\.\\d+)?)$"; 
    final String string = "Laundry Detergent   2X Ultra Free Clear    50 oz   11.99\n" 
     + "Ravioli     Beef        15 oz   1\n" 
     + "Pear Halves    100% Juice      15 oz   1.3\n" 
     + "Gatorade     Sports Drink      8/20 oz  5.48"; 

    final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 
    final Matcher matcher = pattern.matcher(string); 

    int cnt=1; 
    while (matcher.find()) { 
      System.out.println("###### result #######"+cnt++); 
      System.out.println("Group " + 1 + ": " + matcher.group(1)); 
      System.out.println("Group " + 2 + ": " + matcher.group(2)); 
      System.out.println("Group " + 3 + ": " + matcher.group(3)); 
      System.out.println("Group " + 4 + ": " + matcher.group(4)); 
     } 

Output: 
###### result #######1 
Group 1: Laundry Detergent 
Group 2: 2X Ultra Free Clear 
Group 3: 50 oz 
Group 4: 11.99 
###### result #######2 
Group 1: Ravioli 
Group 2: Beef 
Group 3: 15 oz 
Group 4: 1 
###### result #######3 
Group 1: Pear Halves 
Group 2: 100% Juice 
Group 3: 15 oz 
Group 4: 1.3 
###### result #######4 
Group 1: Gatorade 
Group 2: Sports Drink 
Group 3: 8/20 oz 
Group 4: 5.48 
+0

想知道爲什麼downvote ...想知道原因並相應地修復 –