regex - 使用正则表达式从浮点数中去除尾随零
问题描述
给定输入,例如:
123000
-123000
1.230000000
123.4000000
-123.4000000
123.0
是否有一个正则表达式将匹配非尾随零部分,相应地给出如下捕获?:
123000
-123000
1.23
123.4
-123.4
123.0
解决方案
一个可能的候选人是
(?!00+)([+-]?\d+(\.\d?)?)(0*[1-9])*
你可以在这个演示中测试。
第一组是负前瞻,防止选择仅由两个或多个零组成的匹配字符串(00000
否则将匹配尾随字符串)
第二组匹配一个可选的符号,后跟一个或多个数字,可选地后跟一个文字点和一个可选的数字(小数点后的第一个数字可以为零,如您在示例中发布的那样),然后跟随一组由一组零分隔的集合中的 0 组或多组数字[1-9]
(这保证该数字以非零数字结尾)
最后,您需要获得第二组,它界定了您感兴趣的子字符串。有关详细信息,请参阅演示。
更新
强制负前瞻位于左侧的非单词边界,它与链的最后一个零不匹配,因为新数字(连续数字必须是不同的词)导致这个新的正则表达式:
(?!\B00+)([+-]?\d+(\.\d?)?)(0*[1-9])*
可以在demo2中看到
推荐阅读
- sql - JOIN 查询问题:在 Oracle DB 中
- swift - 以编程方式生成的 UIButton 无响应
- image - 自动增亮图像
- c# - c# 我可以防止我的构造函数参数与 VBA 实例化冲突吗?
- java - 禁用烦人的 PODAM 日志
- c++ - 向指针添加偏移量而不转换为 UINT
- reactjs - 为通用 React 上下文消费者编写“HoC 工厂函数工厂”
- android - 使gridview项目可一一点击
- amazon-web-services - Redshift:AWS ds2.2xlarge vs AWS ds2.8xlarge:哪一个在插入/更新/删除操作中表现良好
- angular - 如何在 typescript 组件中运行 JavaScript 代码