有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想用动态字符数替换字符串中的所有匹配项;让我们使用[\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/>(Regex:<[\d]+/>)->DDDDDDD
  2. 123.->DDDD,而:123->123(即不匹配)

注意:我不是想parse HTML with a regex


共 (1) 个答案

  1. # 1 楼答案

    你真的想得太多了。只需使用\d替换为D{a1}。不需要获取字符串的长度或进行任何额外的处理;就一杯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"));
    }