繁体   English   中英

正则表达式排除以偶数位数结尾的零

[英]Regex to exclude trailing zero with even numbers of digits

我需要一些我要编写的正则表达式的支持。

我收到了一个始终由8位数字组成的字符串(例如12345678)。 从该字符串中,我需要删除结尾的零,但始终保持偶数个数字。

因此,例如:

  • 12345678-> 12345678
  • 12345600-> 123456
  • 12345000-> 123450
  • 12003000-> 120030

对我而言,最重要的部分是确保保持偶数。

我尝试使用一些(\\d\\d)+[^(00)]+但无法实现我想要的功能。

像这样的简单正则表达式应该起作用:

(?:00)+$

用空字符串替换。

我使用了一个非捕获组而不是字符类来将2个零组合在一起,然后添加了一个+量词以仅匹配2个零的“倍数”,即偶数个零。

演示版

如果您想要一个可以匹配而不是替换的正则表达式,则可以这样做:

^\d+?0?(?=(?:00)*$)

懒惰地寻找数字,直到达到0。我们是否将此数字匹配为零? 这取决于我们是否在其后看到偶数0。 但是,这不适用于全0的情况,例如0000 ,但是由于您说过永远不会遇到此值,因此您不必担心太多。

演示版

试试这个正则表达式:

(?:00)*$

将每个匹配项替换为空白字符串。

点击演示

说明:

  • (?:00)* -匹配0次或多次出现00
  • $ -声明行的结尾。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(00)*$";
final String string = "12345678\n"
     + "12400000\n"
     + "12005600\n"
     + "12340000\n"
     + "12000000\n"
     + "12340000\n"
     + "12345000";
final String subst = "";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);

以下是结果

Substitution result: 12345678
1240
120056
1234
12
1234
123450

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM