要查找和替换的正则表达式模式

Regex Pattern to Find and Replace

正则表达式应识别“0000046qwerty”之类的文本并将其替换为“46qwerty”。

其他示例:

0000qw --> 0qw
123 --> 123
0123 --> 123
123qw --> 123qw
12003qw --> 12003qw

因此,重点主要放在前导零以及在适当情况下截断它们的方法。

我的解决方案是:(调用 replaceFirst 两次)

text.replaceFirst("^[0]+(\d+)", "").replaceFirst("^[0]*(\d{1}\w+)", "")

是否有单行正则表达式来进行操作?

像这样使用正则表达式:这适用于您的所有情况:P

public static void main(String[] args) {
    String text="0000qw";
    System.out.println(text.replaceAll("^0{2,}(?=0[^0])",""));
}

O/P :

0qw

只需 "skip" 前导零,留下一位数字及其后的任何符号:

text.replaceAll("^0+(\d.*)", "")

模式匹配是贪婪的,因此 0* 将匹配尽可能多的零,至少留下一个数字与 \d 匹配。 ^ 表示只删除前导零。

text.replaceAll("^0*(\d.*)", "")
text.replaceFirst("^[0]+(\d+)", "")

合作
0000qw -> 0qw

12003qw -> 12003qw

为什么叫第二个replaceFirst?