首页 > 解决方案 > 在一个字符串中,我想用它的第三个方括号字符串替换方括号内的所有单词

问题描述

我有一个字符串" case 1 is good [phy][hu][get] my dog is [hy][iu][put] [phy][hu][gotcha]"

我希望结果字符串为" case 1 is good get my dog is [hy][iu][put] gotcha "

基本上,我希望将格式的所有子字符串[phy][.*][.*]替换为最后一个(第三个)方括号的内容。

我尝试使用这个正则表达式模式"\[phy\]\.[^\]]*]\.\[(.*?(?=\]))]",但我想不出一种方法来解决我的问题,而不必遍历每个匹配的子字符串。

标签: javaregex

解决方案


您可以使用

\[phy\]\[[^\]\[]*\]\[([^\]\[]*)\]

并替换为$1. 请参阅正则表达式演示Reglex 图

在此处输入图像描述

细节

  • \[phy\]-[phy]子串
  • \[-[字符
  • [^\]\[]*- 0 个或多个字符,而不是[and]
  • \]- 一个]字符
  • \[-[字符
  • ([^\]\[]*)- 捕获$1匹配零个或多个字符的组 1(是其在替换模式中的值[]
  • \]- 一个]字符

Java 使用演示

String input = "case 1 is good [phy][hu][get] my dog is [hy][iu][put] [phy][hu][gotcha]";
String result = input.replaceAll("\\[phy]\\[[^\\]\\[]*]\\[([^\\]\\[]*)]", "$1");
System.out.println(result); 
// => case 1 is good get my dog is [hy][iu][put] gotcha

推荐阅读