我需要在braces()中找到文本并用一些文本替换它们,正则表达式' 我写的不行,请建议。
String x = "([(34mm)(89)[]";
我需要输出为([(1)(1)[]
System.out.println(x.replaceAll("\\(.*\\)", "1")); // not giving desired o/p
另外我还想要替换文本值,就像我需要34mm和89这样我可以做一些 对它的计算,也让我知道。
感谢。
答案 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正则表达式中就不可能(或者它需要某种复杂的技巧)。在这种情况下,只需回到循环解决方案。