我想用动态数量的字符替换字符串中的所有匹配项;让我们使用 [\d]+
作为一个简单的正则表达式示例:
期望的结果:
-
1984
->DDDD
-
1
->D
-
123456789
->DDDDDDDDD
-
a 123 b ->
a DDD b`
替换正则表达式匹配的常见 Java 方法如下所示:
Pattern p = Pattern.compile("[\d]+");
String input = [...];
String replacement = ???;
String result = p.matcher(input).replaceAll(replacement);
我的问题是:我是否必须提取各个匹配项,测量它们的长度,然后基于此生成替换字符串?或者 Java 是否提供了更直接的方法?
更新:实际上,我通过给出相当简单的示例来简化问题。考虑到更多上下文,以下是一些应该捕获的内容:
-
<1984/>
(正则表达式:<[\d]+/>
)->DDDDDDD
-
123.
->DDDD
,而:123
->123
(即不匹配)
注意:我没有尝试 parse HTML with a regex 。
最佳答案
你真的想太多/太复杂了。只需使用 \d
替换为 D
as seen here 。不需要获取字符串的长度或进行任何额外的处理;只是一个直接的 replaceAll()
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/