带有量词的Java正则表达式:用动态生成的字符串替换匹配

时间:2018-02-23 16:40:00

标签: java regex regex-greedy

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

期望的结果:

  1. 1984 - > DDDD
  2. 1 - > D
  3. 123456789 - > DDDDDDDDD
  4. a 123 b ->一个DDD b`
  5. 替换正则表达式匹配的常见Java方法如下所示:

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

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

    更新:我实际上通过提供相当简单的示例来解决问题。这里还有一些应该被捕获的内容,考虑更多的背景:

    1. <1984/>(正则表达式:<[\d]+/>) - &gt; DDDDDDD
    2. 123. - &gt; DDDD,而:123 - &gt; 123(即不匹配)
    3. 注意:我尝试parse HTML with a regex

1 个答案:

答案 0 :(得分:1)

你真的是在过度思考/过度复杂化。只需将\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"));
}
相关问题