我有以下文字:

Dorothy 123456789  0        98765Fashion


我需要用相同数量的0替换0和98765之间的空格,因此它看起来像:

Dorothy 123456789  0000098765Fashion


有一个陷阱:


0到98765之间的空格的确切数目是未知的。可能没有,可能有很多。
开头的0是一个常数,但98765中的数字也在变化。


到目前为止,我只用一个单一的0代替了0和98765之间的空格,但它不与所有其余的空格匹配为零:

regexExpression = "(.{7}).(\\d{9})(..)0(\\s+)(\\d+)(.{7})";
replacement = "$1$2$300$5$6";
newString = oldString.replaceAll(regexExpression, replacement);

最佳答案

您可以在此处使用基于\G的正则表达式:

(?<=0|\G)\h(?=\h*\d)


并替换为:

0


在Java代码中:

str = str.replaceAll("(?<=0|\\G)\\h(?=\\h*\\d)", "0");


RegEx Demo

正则表达式详细信息:


\G在上一场比赛的末尾或首场比赛的字符串开头断言位置
(?<=0|\G):确保在上一个位置的前一场比赛为零或结尾
\h:匹配水平空白
(?=\h*\d):确保我们有0个或多个空格,后跟一个数字

10-06 10:24