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

Java 要查找和替换的正则表达式模式,java,regex,replace,Java,Regex,Replace,正则表达式应该识别像“0000046qwerty”这样的文本,并用“46qwerty”替换 其他例子: 0000qw-->0qw 123-->123 0123-->123 123qw-->123qw 12003qw-->12003qw 因此,重点主要放在前导零和在适当场景中截断它们的方法上 我的解决方案是:(调用replaceFirst两次) text.replaceFirst(“^[0]+(\\d+”,“$1”).replaceFirst(^[0]*(\\d{1}\\w+”,“$1”) 是否有

正则表达式应该识别像“0000046qwerty”这样的文本,并用“46qwerty”替换

其他例子:

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

因此,重点主要放在前导零和在适当场景中截断它们的方法上

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

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


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

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

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


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

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

只需“跳过”前导零,然后留下一个数字和任何符号:

text.replaceAll("^0+(\\d.*)", "$1")
只需“跳过”前导零,然后留下一个数字和任何符号:

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

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

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

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

text.replaceAll("^0*(\\d.*)", "$1")
配合

0000qw -> 0qw

12003qw -> 12003qw
你为什么叫第二个来代替第一个

配合

0000qw -> 0qw

12003qw -> 12003qw

你为什么叫第二个代替者第一个?

Ya。。我不像你那样想+1 :P@StefanA-固定。Add^但尼尔是第一个;)只是保留我的想法并加以改进:DYa。。我不像你那样想+1 :P@StefanA-固定。Add^但尼尔是第一个;)仍然保留我的想法并加以改进:D0000qw-->0qw似乎与其他示例不一致。还有一条规则必须遵守吗?@StefanA没有。我从数据中看不出任何其他规则。你没有看到这条规则确实留下了一个
0
?不是所有的零都被去除了吗?或者这是一个错误的例子?还是一个“O”?@StefanA:是的,不是所有的零都被去掉了。它取决于连续值。如果是字母表,则保留一个零,否则丢弃它们。因此,
text.replaceFirst(“^[0]+(\\d+),“$1”)
有什么问题,而不需要第二次调用replaceFirst。第二个调用似乎没有任何作用。0000qw-->0qw似乎与其他示例不一致。还有一条规则必须遵守吗?@StefanA没有。我从数据中看不出任何其他规则。你没有看到这条规则确实留下了一个
0
?不是所有的零都被去除了吗?或者这是一个错误的例子?还是一个“O”?@StefanA:是的,不是所有的零都被去掉了。它取决于连续值。如果是字母表,则保留一个零,否则丢弃它们。因此,
text.replaceFirst(“^[0]+(\\d+),“$1”)
有什么问题,而不需要第二次调用replaceFirst。第二个电话似乎没用。