正则表达式删除第一个字符后的所有零,直到序列中的最后一个零

时间:2015-01-08 04:17:42

标签: java regex

我想删除第一个字母后面的所有零:

示例:

AZ0000120003 -> AZ120003
ABDE00000DD012E04 -> ABDEDD012E04
000000A11 -> A11

我的正则表达式是:

^[^0-9]*0+

所以在Java中我写道:

"RE0000A3008".replaceAll("^[^0-9]*0+", "");

但它返回

A3008

我需要的是

REA3008

如何从结果中排除匹配的第一部分?

4 个答案:

答案 0 :(得分:2)

您需要replaceFirst,而不是replaceAll。这是正确的正则表达式:

0+

该行将是:

String foo = "RE0000A3008";
foo = foo.replaceFirst("0+");
// System.out.println(foo);

要修复原始方法,您应该使用反向引用捕获的替换:

"RE0000A3008".replaceAll("^([^0-9]*)0+", "$1");
                           ^^^^^^^^^      ^
                           Capturing      Ref

答案 1 :(得分:2)

您可以使用正则表达式:

([a-zA-Z]+)0+(.*)

并将其替换为:

$1$2

以下是正则表达式的细分:

  

([a-zA-Z] +)第一个捕获组:
   [a-zA-Z] 匹配任何字母,小写或大写

   + 确保上述正则表达式至少发现一次

     

0 + 一次或多次匹配文字字符“0”

     

(。*)第二个捕获组
  。* 匹配任何字符,任意次数

这只会匹配一个字母后面的第一组零,然后不会将它们包含在结果中。

当它被$1$2替换时,这意味着我们将分别用第一个捕获组([a-zA-Z]+)和第二个捕获组(.*)替换它。 因此,您的代码可能如下所示:

myString.replaceAll("([a-zA-Z]+)0+(.*)", "$1$2")

这是regex101.com测试:https://regex101.com/r/kJ7bA9/1

答案 2 :(得分:2)

尝试使用:

^([A-Z]*)0*

并将其替换为$1。这是一个演示:https://regex101.com/r/sH8aR8/17

答案 3 :(得分:0)

使用此模式

\b([A-Z]*)0+

并替换w / $1
Demo