正则表达式排除带有偶数位数的尾随零

我需要一些关于我正在尝试编写的正则表达式的支持。

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

例如:

  • 12345678 --> 12345678

  • 12345600 --> 123456

  • 12345000 --> 123450

  • 12003000 --> 120030

对我来说,虽然部分是确保保持偶数。

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


九州编程
浏览 106回答 3
3回答

HUWWW

像这样的简单正则表达式应该可以工作:(?:00)+$替换为空字符串。我使用非捕获组而不是字符类将 2 个零组合在一起,然后添加一个+量词以仅匹配 2 个零的“倍数”,即偶数个零。演示如果您想要一个可以匹配而不是替换的正则表达式,则可以使用:^\d+?0?(?=(?:00)*$)懒惰地寻找数字,直到我们达到 0。我们是否匹配这个零?这取决于我们是否在它之后看到偶数个 0。但是,这不适用于全 0 的情况,例如0000,但是由于您说您永远不会遇到此值,因此您不必太担心。演示

慕娘9325324

试试这个正则表达式:(?: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 variablefinal String result = matcher.replaceAll(subst);System.out.println("Substitution result: " + result);下面是结果Substitution result: 1234567812401200561234121234123450
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java