我想从字符串中删除零,下面是一个示例:字符串a: 020200218-0PSS-0010 ```a.replaceall("-(?:.(?!-))+$", "REPLACEMENT")
020200218-0PSS-0010
实际值: `020200218-0PSS-0010` 预期: `020200218-0PSS-10` 我用这个正则表达式来捕捉-0010: `-(?:.(?!-))+$` 我只是不知道在替换部分要做什么才能真正删除未使用的零(不是最后一个零,例如“10”而不是“1”) 感谢阅读!
kognpnkq1#
您可以尝试以下方法:
String result = a.replaceAll("-0+(?=[1-9][0-9]*$)", "-");
对于输入端: String a = "020200218-0PSS-00000010"; 输出为: 020200218-0PSS-10
String a = "020200218-0PSS-00000010";
020200218-0PSS-10
k7fdbhmy2#
你可以用这样的方法:
(?<=-)0+(?=[1-9]\d*$)
它的意思是“找到破折号后面的所有零,直到一个非零的数字,然后是可选的数字,直到字符串的结尾。”下面的演示是用php编写的,但在java中也应该有效。https://regex101.com/r/7e2kkq/1
$s.replaceAll("(?<=-)0+(?=[1-9]\d*$)", "")
这也会起作用:
(?<=-)(?=\d+$)0+
找一个位置,在我后面是一个破折号,在我前面是数字,直到最后一行。从此位置匹配一个或多个连续零。https://regex101.com/r/cdtjoz/1
30byixjq3#
模式 -(?:.(?!-))+$ 匹配a - 并且1+乘以任何Assert右边的字符都不是 - ,直到字符串结束。这不考虑任何数字,如果成功,将给出一个完全匹配,而不仅仅是零。代替lookaround,您还可以使用一个捕获组,并在替换中使用该组 - 准备好了。
-(?:.(?!-))+$
-
-0+([1-9]\d*)$
解释 -0+ 匹配 - 一次或多次零 ( 捕获组1 [1-9]\d* 匹配数字1-9,后跟可选数字 ) 关闭组1 $ Assert字符串结尾正则表达式演示| java演示因为只有一个零件需要更换,所以可以先使用replacefirst。
-0+
(
[1-9]\d*
)
$
String a = "020200218-0PSS-0010"; String result = a.replaceFirst("-0+([1-9]\\d*)$", "-$1"); System.out.println(result);
输出
3条答案
按热度按时间kognpnkq1#
您可以尝试以下方法:
对于输入端:
String a = "020200218-0PSS-00000010";
输出为:020200218-0PSS-10
k7fdbhmy2#
你可以用这样的方法:
它的意思是“找到破折号后面的所有零,直到一个非零的数字,然后是可选的数字,直到字符串的结尾。”
下面的演示是用php编写的,但在java中也应该有效。
https://regex101.com/r/7e2kkq/1
这也会起作用:
找一个位置,在我后面是一个破折号,在我前面是数字,直到最后一行。从此位置匹配一个或多个连续零。
https://regex101.com/r/cdtjoz/1
30byixjq3#
模式
-(?:.(?!-))+$
匹配a-
并且1+乘以任何Assert右边的字符都不是-
,直到字符串结束。这不考虑任何数字,如果成功,将给出一个完全匹配,而不仅仅是零。
代替lookaround,您还可以使用一个捕获组,并在替换中使用该组
-
准备好了。解释
-0+
匹配-
一次或多次零(
捕获组1[1-9]\d*
匹配数字1-9,后跟可选数字)
关闭组1$
Assert字符串结尾正则表达式演示| java演示
因为只有一个零件需要更换,所以可以先使用replacefirst。
输出