获取特定字符

ecbunoof  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(321)

我想从字符串中删除零,下面是一个示例:
字符串a: 020200218-0PSS-0010 ```
a.replaceall("-(?:.(?!-))+$", "REPLACEMENT")

实际值: `020200218-0PSS-0010` 预期: `020200218-0PSS-10` 我用这个正则表达式来捕捉-0010: `-(?:.(?!-))+$` 我只是不知道在替换部分要做什么才能真正删除未使用的零(不是最后一个零,例如“10”而不是“1”)
感谢阅读!
kognpnkq

kognpnkq1#

您可以尝试以下方法:

String result = a.replaceAll("-0+(?=[1-9][0-9]*$)", "-");

对于输入端: String a = "020200218-0PSS-00000010"; 输出为: 020200218-0PSS-10

k7fdbhmy

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

30byixjq

30byixjq3#

模式 -(?:.(?!-))+$ 匹配a - 并且1+乘以任何Assert右边的字符都不是 - ,直到字符串结束。
这不考虑任何数字,如果成功,将给出一个完全匹配,而不仅仅是零。
代替lookaround,您还可以使用一个捕获组,并在替换中使用该组 - 准备好了。

-0+([1-9]\d*)$

解释 -0+ 匹配 - 一次或多次零 ( 捕获组1 [1-9]\d* 匹配数字1-9,后跟可选数字 ) 关闭组1 $ Assert字符串结尾
正则表达式演示| java演示
因为只有一个零件需要更换,所以可以先使用replacefirst。

String a = "020200218-0PSS-0010";
String result = a.replaceFirst("-0+([1-9]\\d*)$", "-$1");
System.out.println(result);

输出

020200218-0PSS-10

相关问题