2014-12-21 38 views
3

我想用正則表達式來解決以下問題有所幫助:分割在多個分隔符,但保持分隔符上相同的字符串

我有一個字符串,如「1£23 $ 456 $£$」

當我劈在這我想在我的字符串數組輸出包含:

1£ 
23$ 
456$ 
£ 
$ 

人對如何最好地解決這個問題的任何想法?該解決方案需要滿足這些額外的要求:

  1. 也被分成上分隔符:+-*/
  2. 非分隔符僅與分隔符之前可選的空間位。
  3. 任何這樣的空間都是價值的一部分,而不是分隔符本身。
+0

是井號和美元符號,將永遠在你輸入的字符串被發現,或者是其他的只有兩個分隔符分隔符可能?一個好的正則表達式只能在知道輸入的限制時才製作。 – Bobulous

回答

3

使用功能更強大的Matcher功能代替String.split。下面的代碼應該工作,但一直沒有得到優化:

Pattern pattern = Pattern.compile("\\d*(\\$|£)"); 

String input = "1£23$456$£$"; 
Matcher matcher = pattern.matcher(input); 
List<String> output = new ArrayList<>(); 
while (matcher.find()) { 
    output.add(matcher.group()); 
} 

打印出來output.toString()產生:

[1£, 23$, 456$, £, $]


更新的要求:

  1. 還包括分隔符字符:+,-,*/
  2. 非分隔字符只是在分隔符之前帶有可選空格的數字。
  3. 任何這樣的空間都是價值的一部分,而不是分隔符本身。

使用正則表達式:\\d*\\s*[-\\+\\*/\\$£]

這種模式,這個給定的輸入:

1£23$456$£$7+89-1011*121314/1 £23 $456 $ £ $7 +89 -1011 * 121314 /

就會產生此輸出:

[1£, 23$, 456$, £, $, 7+, 89-, 1011*, 121314/, 1 £, 23 $, 456 $, £, $, 7 +, 89 -, 1011 *, 121314 /]

+0

看起來有和你正在使用或更重要的是一個無效的轉義序列正則表達式的問題。 – user1383163

+0

@ user1383163是,固定編輯。 –

+0

感謝,所以我說+ - * /以及這給了我\\ d *(\\ $ |£| - | \\ + | \\ * | /),但是這似乎是錯的,你能確定,如果我我犯了一個錯誤 – user1383163

0

你可能想這

Matcher m = Pattern.compile("[^$£]*(\\$|£)").matcher(input); 
+0

不該該是'[^ $£] *(\ $ |£)' – artm

2

使用一看後面,這是不消耗:

String[] parts = str.split("(?<=\\D)"); 

這一切就是這麼簡單。正則表達式意味着將「每個非數字之後」分開,這似乎完全是您的意圖。


一些測試代碼:

String str = "1£23$456$£$"; 
String[] parts = str.split("(?<=\\D)"); 
System.out.println(Arrays.toString(parts)); 

輸出:

[1£, 23$, 456$, £, $] 
相關問題