我想写一个正则表达式,可以删除[cent]周围的括号

String input1 = "this is a [cent] and [cent] string"
String output1 = "this is a cent and cent string"


但是,如果它像这样嵌套:

String input2="this is a [cent[cent] and [cent]cent] string"
String output2="this is a cent[cent and cent]cent string"


我只能在字符串上使用replaceAll,所以如何在下面的代码中创建模式?替换字符串应该是什么?

Pattern rulerPattern1 = Pattern.compile("", Pattern.MULTILINE);
System.out.println(rulerPattern1.matcher(input1).replaceAll(""));


更新:嵌套的括号格式正确,并且只能位于两层深度,如情况2所示。

编辑:
如果这是字符串"[<centd>[</centd>]purposes[<centd>]</centd>]";则OUPTUT应该为<centd>[</centd> purposes <centd>]</centd> ..基本上,如果括号在centd开始和结束之间,则将其保留在该位置,否则将其删除

最佳答案

描述

该正则表达式将基于支架的仅一侧上的空间来替换支架。

正则表达式:(?<=\s)[\[\]](?=\S)|(?<=\S)[\[\]](?=\s)

用空字符串替换



摘要


样品1


输入:this is a [cent[cent] and [cent]cent] string
输出this is a cent[cent and cent]cent string

样品2


输入:this is a [cent[cent] and [cent]cent] string
输出this is a cent[cent and cent]cent string

样品3


输入:[<cent>[</cent>] and [<cent>]Chemotherapy services.</cent>]
输出[<cent>[</cent> and <cent>]Chemotherapy services.</cent>]





为了解决对该表达式的查找问题,需要使用以下表达式:


[<centd>[</centd>]并将其替换为<centd>[</centd>
[<centd>][</centd>],并仅删除外部方括号
保留所有其他方括号


正则表达式:\[(<centd>[\[\]]<\/centd>)\]|\[(<\/?centd>)\]

替换为:$1$2




样品4


输入:[<centd>[</centd>]purposes[<centd>]</centd>]
输出<centd>[</centd>pur [T] poses<centd>]</centd>

关于java - 正则表达式,用于在标记内转换括号和嵌套括号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17051323/

10-12 13:31