为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2022-07-20 20:24:36
我需要一些关于我正在尝试编写的正则表达式的支持。我收到一个总是由 8 位数字组成的字符串(如 12345678)。从这个字符串中,我需要删除尾随零,但始终保持偶数位数。例如:12345678 --> 1234567812345600 --> 12345612345000 --> 12345012003000 --> 120030对我来说,虽然部分是确保保持偶数。我尝试使用一些(\d\d)+[^(00)]+,但它没有达到我想要的效果。
查看完整描述

3 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

像这样的简单正则表达式应该可以工作:

(?:00)+$

替换为空字符串。

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

演示

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

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

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

演示


查看完整回答
反对 回复 2022-07-20
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

试试这个正则表达式:

(?:00)*$

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

点击演示

解释:

  • (?:00)*- 匹配 0 次或多次出现的00.

  • $- 断言行尾。


查看完整回答
反对 回复 2022-07-20
?
墨色风雨

TA贡献1853条经验 获得超6个赞

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


查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信