2014-11-25 19 views
0

我需要在大括號()中找到文本並用一些文本替換它們,我寫的正則表達式' 將不起作用,請建議。在java中使用正則表達式替換大括號文本

String x = "([(34mm)(89)[]"; 

我需要的輸出([(1)(1)[]

System.out.println(x.replaceAll("\\(.*\\)", "1")); // not giving desired o/p 

另外我也想替換文本值,正如我需要34毫米和89,這樣我可以做一些 計算就可以了,讓我知道,太。

謝謝。

回答

2

用積極的前瞻和回顧後如下圖所示,

String x = "([(34mm)(89)[]"; 
System.out.println(x.replaceAll("(?<=\\()[^()]*(?=\\))", "1")); 

輸出:

([(1)(1)[] 

說明:

  • (?<=\\()字符串,我們要匹配必須PREC由(符號。
  • [^()]*匹配任何字符,但不匹配()零次或多次。
  • (?=\\))匹配後必須跟一個)符號。
0

沒有前瞻或查找背後:

System.out.println(x.replaceAll("\\([^()]*\\)", "(1)")); 

如果可以假設不會有嵌套或雜散()一對括號內,這個問題簡化爲禁止()而不是像你原來的代碼那樣允許它。

如果你想匹配適當的平衡圓括號,那麼它在Java正則表達式中是不可能的(要麼,要麼它需要某種令人費解的技巧)。在這種情況下,只需要回到循環解決方案。

相關問題