带量词的 Java 正则表达式 : replace matches by dynamically generated string

标签 java regex regex-greedy

我想用动态数量的字符替换字符串中的所有匹配项;让我们使用 [\d]+ 作为一个简单的正则表达式示例:

期望的结果:

  1. 1984 -> DDDD
  2. 1 -> D
  3. 123456789 -> DDDDDDDDD
  4. a 123 b -> a DDD b`

替换正则表达式匹配的常见 Java 方法如下所示:

Pattern p = Pattern.compile("[\d]+");
String input = [...];
String replacement = ???;
String result = p.matcher(input).replaceAll(replacement);

我的问题是:我是否必须提取各个匹配项,测量它们的长度,然后基于此生成替换字符串?或者 Java 是否提供了更直接的方法?

更新:实际上,我通过给出相当简单的示例来简化问题。考虑到更多上下文,以下是一些应该捕获的内容:

  1. <1984/>(正则表达式:<[\d]+/>)-> DDDDDDD
  2. 123. -> DDDD ,而:123 -> 123 (即不匹配)

注意:我没有尝试 parse HTML with a regex

最佳答案

你真的想太多/太复杂了。只需使用 \d 替换为 D as seen here 。不需要获取字符串的长度或进行任何额外的处理;只是一个直接的 replaceAll()

See code in use here

final String[] a = {"1984","1","123456789","a 123 b"};
for (String s: a) {
    System.out.println(s.replaceAll("\\d","D"));
}

关于带量词的 Java 正则表达式 : replace matches by dynamically generated string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48952483/

相关文章:

java - 在同一轴上平移和旋转时出现奇怪的行为

java - Maven 不使用本地存储库

javascript - 正则表达式,替换某些组合

regex - 用于编译指示的 ReSharper To-Do Explorer 正则表达式模式

Python 非贪婪正则表达式

java - Eclipse RCP 4 - 处理程序方法参数

regex - 需要从 url 中删除特定参数

javascript - 查找 pec+ 的正则表达式模式

javascript - 用于处理 JSON 中的 ""的正则表达式匹配

java - 如何使用java正则表达式替换字符串