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

时间:2019-03-06 07:35:52

标签: java regex

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

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

例如:

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

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

我尝试使用一些(\d\d)+[^(00)]+,但没有达到我想要的。

3 个答案:

答案 0 :(得分:5)

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

(?:00)+$

替换为空字符串。

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

Demo

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

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

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

Demo

答案 1 :(得分:5)

尝试此正则表达式:

(?:00)*$

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

click for Demo

说明:

  • (?:00)*-匹配0次或多次出现的00
  • $-声明该行的结尾。

答案 2 :(得分:0)

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