用零替换未知数量的空格[Regex / Java]

时间:2018-10-31 18:16:52

标签: java regex

我有以下文字:

Dorothy 123456789  0        98765Fashion 

我需要将 0 98765 之间的空格替换为相同的0s ,这样看起来:

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);

3 个答案:

答案 0 :(得分:3)

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

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

并替换为:

0

在Java代码中:

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

RegEx Demo

RegEx详细信息:

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

答案 1 :(得分:0)

如果这是作为字符串输入的,请尝试以下操作:

`

String a = "Dorothy 123456789  0        98765Fashion";

char[] chars = a.toCharArray();

for(int i =0; i<chars.length;i++){

   if(chars[i]==0&&chars[i+1]==' '){
      chars[i+1]=0;
   }

}

`

答案 2 :(得分:0)

Java 9 +

如果您使用的是Java 9+,则可以这样使用Matcher::replaceAll

newString = Pattern.compile("0(\\s*)\\d+")
        .matcher(oldString)
        .replaceAll(g -> g.group(0).replace(" ", "0")); 

g.group(0)将捕获0到数字之间的所有空格,那么您只需将该组中的每个空格替换为0。(简单易用)。


输出

Dorothy 123456789  00000000098765Fashion