如何修改正则表达式以排除带正号与科学计数法的正浮点数
正浮点数正则表达式修改方案
我在Stack Overflow找到的正浮点数匹配正则,原本会匹配带正号(+)和科学计数法的内容,现调整如下以排除这类情况,同时满足给定的匹配规则:
原正则表达式
^(?!(?:^[-+]?[0.]+(?:[Ee]|$)))(?!(?:^-))(?:(?:[+-]?)(?=[0123456789.])(?:(?:(?:[0123456789]+)(?:(?:[.])(?:[0123456789]*))?|(?:(?:[.])(?:[0123456789]+))))(?:(?:[Ee])(?:(?:[+-]?)(?:[0123456789]+))|))$
修改后的正则表达式
^(?!^[0.]+$)(?:[1-9]\d*\.?\d*|0\.\d+|\.\d+)$
修改说明
- 移除符号匹配分支:删掉原正则中的
(?:[+-]?),彻底禁止匹配带+或-的数值; - 删除科学计数法匹配部分:去掉原正则末尾的
(?:(?:[Ee])(?:(?:[+-]?)(?:[0123456789]+))|),直接排除任何包含E/e的科学计数法格式; - 简化否定前瞻:将原有的复杂前瞻替换为
(?!^[0.]+$),用于排除纯0、.0、0.这类无效的零值格式; - 优化核心匹配规则:拆分三类有效格式,覆盖所有符合要求的正浮点数:
[1-9]\d*\.?\d*:匹配大于0的整数(如2、1)、带小数点的整数(如2.、1.)、整数部分非0的小数(如1.3、3.0);0\.\d+:匹配整数部分为0、小数部分非0的数值(如0.3);\.\d+:匹配无整数部分、小数部分非0的数值(如.03、.00000000000000000000000000000000000000000000000000000000000000000000000001)。
测试验证
正确匹配项(全部命中)
2 2. 1 1. 1.3 .00000000000000000000000000000000000000000000000000000000000000000000000001 .03 0.3 3.0
正确不匹配项(全部排除)
-2 -1 0 +0 -0 .0 0. -3.2 5.13.7 00.00 +00 -00 +0-1 0000. McGillicuddy .0000000000000000000000000000000000000000000000000000000000000000000 0e50 0e-50
需排除的匹配项(全部不匹配)
+2 +1 +365.2425 6.02e23 1e50 1e+50 1e-50
内容的提问来源于stack exchange,提问作者maxmoore14
相关产品推荐
相关产品推荐

