我需要在我要编写的正则表达式上提供一些支持。
我收到了一个始终由8位数字组成的字符串(例如12345678)。从该字符串中,我需要删除结尾的零,但始终保持偶数个数字。
例如:
对我来说,最重要的部分是确保保持偶数。
我尝试使用一些(\d\d)+[^(00)]+
,但没有达到我想要的。
答案 0 :(得分:5)
像这样的简单正则表达式应该起作用:
(?:00)+$
替换为空字符串。
我使用了一个非捕获组而不是字符类来将2个零组合在一起,然后添加了一个+
量词以仅匹配2个零的“倍数”,即偶数个零。
如果您想要一个可以匹配而不是替换的正则表达式,那么可以这样做:
^\d+?0?(?=(?:00)*$)
懒惰地寻找数字,直到我们达到0。我们是否匹配这个零?这取决于我们是否在其后看到偶数0。但是,这不适用于全0的情况,例如0000
,但是由于您说过永远不会遇到此值,因此您不必担心太多。
答案 1 :(得分:5)
答案 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