如何匹配并移除双括号[[]]内的所有空格?
移除双括号[[]]内空格的可行方案
核心逻辑
你之前的正则只匹配括号内全是空格的情况,自然找不到内容。正确的做法是先匹配整个[[...]]块,再单独处理块内的内容——去掉里面所有空格后,再重新拼回双括号。
Java实现代码
Java 9+ 简洁写法
String input = "text text [[ ia asd ]] [[asdasd]] dfgd dfaf sddgsd [[sss aaa]]"; String result = input.replaceAll("\\[\\[(.*?)\\]\\]", m -> "[[" + m.group(1).replaceAll("\\s+", "") + "]]"); System.out.println(result);
Java 8及以下兼容写法
String input = "text text [[ ia asd ]] [[asdasd]] dfgd dfaf sddgsd [[sss aaa]]"; Pattern pattern = Pattern.compile("\\[\\[(.*?)\\]\\]"); Matcher matcher = pattern.matcher(input); StringBuffer sb = new StringBuffer(); while (matcher.find()) { String cleanedInner = matcher.group(1).replaceAll("\\s+", ""); matcher.appendReplacement(sb, "[[" + cleanedInner + "]]"); } matcher.appendTail(sb); String result = sb.toString(); System.out.println(result);
关键说明
- 正则
\\[\\[(.*?)\\]\\]:用非贪婪捕获(.*?)精准匹配单个[[到最近]]之间的内容,不会跨多个双括号块。 - 替换时,
m.group(1)提取括号内的原始内容,replaceAll("\\s+", "")移除所有空白字符(包括空格、制表符等;如果只想移除空格,把\\s+换成即可)。
测试结果
输入:text text [[ ia asd ]] [[asdasd]] dfgd dfaf sddgsd [[sss aaa]]
输出:text text [[iaasd]] [[asdasd]] dfgd dfaf sddgsd [[sssaaa]]
内容的提问来源于stack exchange,提问作者shinzou
相关产品推荐
相关产品推荐

