AndroidJava正则表达式从子字符串中删除多余的零

AndroidJava正则表达式从子字符串中删除多余的零,第1张

Android / Java正则表达式从子字符串中删除多余的零 更新测试用例答案

使用以下正则表达式:

String rx = "-?0+\.(0)+\b|\.0+\b|\b0+(?=\.\d*[1-9])|\b0+(?=[1-9]\d*\.)|(\.\d*?)0+\b";

并替换为

。参见另一个演示。

regex匹配多种选择,并 捕获 字符串的某些部分,以便以后在替换期间重新插入:

  • -?0+.(0)+b
    -匹配一个可选的选项,
    -
    后跟一个或多个
    0
    s
    .
    ,然后匹配一个,然后 捕获 恰好一个
    0
    但匹配一个或多个出现的对象(因为将
    (...)
    放在上
    0
    并将
    +
    应用于该组);最后的单词边界要求最后一个匹配项之后出现一个非单词字符
    0
    。在替换中,我们
    0
    使用
    反向引用还原。因此,
    -00.00
    00.00
    将被替换
    0
  • |
    - 要么…
  • .0+b
    -点后跟一个或多个零的点
    ,
    (因为字符串以逗号分隔)。
  • |
    - 要么…
  • b0+(?=.d*[1-9])
    -单词边界(字符串的开头或之后的位置
    ,
    ),后跟一个或多个
    0
    s,后跟
    .
    +零个或多个数字,再跟非零数字(因此我们在仅包含零的整数部分中删除了前导零)
  • |
    - 要么…
  • b0+(?=[1-9]d*.)
    -字边界,后跟一个或多个零,后跟一个非零数字
    .
    (因此,我们从不等于的整数部分中删除所有前导零
    0
    )。
  • |
    - 要么…
  • (.d*?)0+b
    -捕获
    .
    +零个或多个数字,但要尽可能少地捕获到第一个数字,
    0
    然后才匹配一个或多个零(直到字符串或的末尾
    ,
    )(因此,我们去除了小数部分的尾随零)
在测试用例更新之前回答

我建议一个非常简单且简短的正则表达式来满足您的需求:

-0+.(0)+b|.0+b|b0+(?=.d*[1-9])

替换为

请参阅regex演示。简短的IDEONE演示:

String re = "-0+\.(0)+\b|\.0+\b|\b0+(?=\.\d*[1-9])"; String str = "2.0,3.00,-4.0,0.00,-0.00,0.03,2.01,0.001,-0.03,101,0.001,-0.03";String expected = "2,3,-4,0,0,.03,2.01,.001,-.03,101,.001,-.03"; System.out.println(str.replaceAll(re, "").equals(expected)); // TRUE

说明

  • -0+.(0)+b
    -减号后跟一个或多个
    0
    s(
    0+
    ),然后是文字点(
    .
    ),然后是一个或多个零(并且仅捕获与
    0
    匹配的最后一个
    (0)+
    ),再加上单词边界(
    ,
    在此上下文中位于之前)
  • |
    - 要么…
  • .0+b
    -文字点(
    .
    )后跟一个或多个零,后跟单词边界(
    ,
    在此上下文中,位于之前)
  • |
    - 要么…
  • b0+(?=.d*[1-9])
    -单词边界(
    ,
    在此上下文中位于后面),后跟一个或多个零, 后跟 一个文字点(
    .
    ),然后是零个或多个数字,然后是1到9范围内的一个数字(这样小数部分会更大)比
    0
    )。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存