我想删除第一个字母后面的所有零:
示例:
AZ0000120003 -> AZ120003
ABDE00000DD012E04 -> ABDEDD012E04
000000A11 -> A11
我的正则表达式是:
^[^0-9]*0+
所以在Java中我写道:
"RE0000A3008".replaceAll("^[^0-9]*0+", "");
但它返回
A3008
我需要的是
REA3008
如何从结果中排除匹配的第一部分?
答案 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)
答案 3 :(得分:0)