You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java纯正则替换:保留指定匹配模式,移除其余内容

纯正则替换实现提取目标序列并格式化

可以通过三次连续的replaceAll调用实现需求,全程无需循环、流或其他遍历操作:

String input = "foo <em>12a123</em> bar <em>32A1234</em> baz";
// 第一步:保留目标序列,其余所有字符替换为空格
String step1 = input.replaceAll("(\\d{2}\\s?[a-zA-Z]\\s?\\d{2,5})|.", "$1 ");
// 第二步:合并多余空格并去除首尾空格,得到用单个空格分隔的目标序列
String step2 = step1.replaceAll("\\s+", " ").trim();
// 第三步:为每个目标序列包裹<code>标签
String result = step2.replaceAll("(\\d{2}\\s?[a-zA-Z]\\s?\\d{2,5})", "<code>$1</code>");

步骤详解

  1. 第一步替换:

    • 正则(\\d{2}\\s?[a-zA-Z]\\s?\\d{2,5})|. 匹配两种内容:要么是符合规则的目标序列(捕获为组1),要么是任意单个字符。
    • 替换模板$1 表示:如果匹配到目标序列则保留它并追加一个空格,否则用空格替换该字符。这样所有非目标内容都会被转为空格,目标序列则被保留并间隔开。
  2. 第二步替换:

    • \\s+ 匹配一个或多个连续空格,替换为单个空格,再通过trim()去除首尾多余空格,得到干净的、用单个空格分隔的目标序列字符串。
  3. 第三步替换:

    • 再次匹配每个目标序列,将其替换为<code>目标序列</code>格式,完成最终格式化。

示例验证

  • 输入:"foo <em>12a123</em>" → 输出:<code>12a123</code>
  • 输入:"<em>12 a123</em> bar <em>32A 1234</em>" → 输出:<code>12 a123</code> <code>32A 1234</code>
  • 输入:"foo bar" → 输出:""

内容的提问来源于stack exchange,提问作者ibexit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:07:19