我有以下文字:
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个或多个空格,后跟一个数字