使用java中的正则表达式替换特定的大括号文本

时间:2014-11-25 13:53:31

标签: java regex string

我需要在braces()中找到文本并用一些文本替换它们,正则表达式' 我写的不行,请建议。

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

我需要输出为([(1)(1)[]

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

另外我还想要替换文本值,就像我需要34mm和89这样我可以做一些 对它的计算,也让我知道。

感谢。

2 个答案:

答案 0 :(得分:2)

使用正面的前瞻和后面的观察,

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

<强>输出:

([(1)(1)[]

<强>解释

  • (?<=\\()我们要匹配的字符串必须以(符号开头。
  • [^()]*匹配任何字符,但不能匹配()零次或多次。
  • (?=\\))匹配后必须跟)符号。

答案 1 :(得分:0)

没有前瞻或后瞻:

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

如果您可以假设在一对括号内没有嵌套或流浪(),则问题会简化为禁止()在括号内[^()]* {{1}} 1}},而不是像原始代码那样允许它。

如果你想匹配正确平衡的括号,那么在Java正则表达式中就不可能(或者它需要某种复杂的技巧)。在这种情况下,只需回到循环解决方案。