替换前导零

时间:2017-05-26 22:43:49

标签: java regex formatting

给定一个包含此字符串的字符串:

Count     %
===========
00000  000%
00012  001%
00905  099%

我希望它看起来像这样:

Count     %
===========
    0    0%
   12    1%
  905   99%

我能得到的最接近的是:

Count     %
===========
    %
 12   1%
 905   99%

使用此代码:

strv.replaceAll("\\b0+", " ")

1 个答案:

答案 0 :(得分:4)

由于您希望按原样维护空间,因此必须单独匹配每个0,然后替换为空格:' '。看看这个正则表达式:

(?<=\b|\G)0(?=\d)
  • (?<=\b|\G)是一个积极的外观,可确保匹配的0前面有\b\G
    • \b表示单词边界,表示\b0将有助于匹配第一个零
    • \G有助于在上一场比赛结束时(在前一场比赛之后)确定位置。所以它将有助于匹配下一个零等等。因此,仅形成0的连续链。
    • 请注意,由于链条以\b开头,因此无法为10000形成链条,因为单词边界\b位于1之前,而不是0 1}}
  • 最后还需要添加正向前瞻(?=\d),因为如果输入只包含零,那么我们需要留下一个零。这个正向前瞻告诉引擎匹配所有零,后跟一个数字。因此,如果输入为0000,则正则表达式将匹配前3个0,因为最后一个不是后跟数字

用法

strv.replaceAll("(?<=\\b|\\G)0(?=\\d)", " ")

Regex101 Demo

编辑:根据@ SebastianProske的建议进行更新。谢谢!