获取特定字符
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.
您可以尝试这样的操作:
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
$
断言字符串结束
由于只有 1 个部件需要更换,您可以使用 replaceFirst。
String a = "020200218-0PSS-0010";
String result = a.replaceFirst("-0+([1-9]\d*)$", "-");
System.out.println(result);
输出
020200218-0PSS-10
我想从字符串中删除零,下面是一个例子:
字符串 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.
您可以尝试这样的操作:
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$
断言字符串结束
由于只有 1 个部件需要更换,您可以使用 replaceFirst。
String a = "020200218-0PSS-0010";
String result = a.replaceFirst("-0+([1-9]\d*)$", "-");
System.out.println(result);
输出
020200218-0PSS-10