获取特定字符

get specific character

我想从字符串中删除零,下面是一个例子:

字符串 a : 020200218-0PSS-0010

a.replaceall("-(?:.(?!-))+$", "**REPLACEMENT**")

实际:020200218-0PSS-0010 预期:020200218-0PSS-10

我正在使用这个正则表达式来捕获 -0010:-(?:.(?!-))+$

我只是不知道在 REPLACEMENT 部分要做什么才能真正删除未使用的零(不是最后一个零,例如“10”而不是“1”)

感谢阅读!

你可以使用类似的东西:

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

它翻译为“查找破折号之后的所有零,导致非零数字,后跟可选数字,直到字符串末尾。”

下面的演示在 PHP 中,但在 Java 中也应该有效。

https://regex101.com/r/7E2KKQ/1

$s.replaceAll("(?<=-)0+(?=[1-9]\d*$)", "")

这也行得通:

(?<=-)(?=\d+$)0+

Find a position in which behind me is a dash and ahead of me is nothing but digits till the end of the line. From this position match one or more continuous zeros.

https://regex101.com/r/cdTjOz/1

您可以尝试这样的操作:

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

对于输入字符串:String a = "020200218-0PSS-00000010"; 输出是: 020200218-0PSS-10

模式 -(?:.(?!-))+$ 匹配 - 并且 1+ 次断言直接在右边的任何字符不是 -,直到字符串结束。

这不考虑任何数字,如果成功,将给出完全匹配而不是仅零。

除了环顾四周,您还可以使用捕获组并在替换中使用该组,并在前面加上 -

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

说明

  • -0+ 匹配 - 和 1 次或多次零
  • ( 捕获 组 1
    • [1-9]\d* 匹配数字 1-9 后跟可选数字
  • ) 关闭组 1
  • $ 断言字符串结束

Regex demo | Java demo

由于只有 1 个部件需要更换,您可以使用 replaceFirst

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

输出

020200218-0PSS-10