正则表达式匹配数字的科学计数法但不匹配其他字母
Regex to match scientific notation of numbers but not other letters
我想写一个正则表达式来匹配所有小数点后最多两位数的正双数。
我的第一个方法是这样的:
^\d+(?:\.\d{1,2})?$
它适用于大多数情况,但不适用于科学记数法,例如 10000000
写成 1.0E7
.
我找到了答案 并根据我的情况对其进行了调整,结果:
[\s=]+([+]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d{1,2}))$
但现在它 returns 对于很多 "good" 值都是错误的。
知道如何让它只匹配小数点后 0 到 2 位的正数值以及数字的科学记数法吗?
您从另一个要求更多要求(即匹配方程式)的答案中复制了准确的正则表达式。您可以尝试稍作修改删除那些:
^[+-]?\d+(?:\.\d*(?:[eE][+-]?\d+)?)?$
假设零不是正数,你可以使用
^(?:0\.(?:0[1-9]|[1-9]\d?)|[1-9]\d*(?:\.\d{1,2})?)(?:e[+-]?\d+)?$
哪里
(?:0\.(?:0[1-9]|[1-9]\d?)
匹配小于 1 且最多保留 2 位小数的正数
[1-9]\d*(?:\.\d{1,2})?
匹配等于或大于1的正数,可选最多2位小数
(?:e[+-]?\d+)?
可选匹配科学记数法
注意事项:
- 不允许有前导零
- 不允许
.
没有小数位(可以使用\.\d{0,2}
修复)
- 由于电子符号(例如 1e-3),可以有更多的小数位
- 应该使用 i-Modifier
- 您可能只想使用您的语言能力来解析和比较浮点值
我想写一个正则表达式来匹配所有小数点后最多两位数的正双数。
我的第一个方法是这样的:
^\d+(?:\.\d{1,2})?$
它适用于大多数情况,但不适用于科学记数法,例如 10000000
写成 1.0E7
.
我找到了答案
[\s=]+([+]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d{1,2}))$
但现在它 returns 对于很多 "good" 值都是错误的。
知道如何让它只匹配小数点后 0 到 2 位的正数值以及数字的科学记数法吗?
您从另一个要求更多要求(即匹配方程式)的答案中复制了准确的正则表达式。您可以尝试稍作修改删除那些:
^[+-]?\d+(?:\.\d*(?:[eE][+-]?\d+)?)?$
假设零不是正数,你可以使用
^(?:0\.(?:0[1-9]|[1-9]\d?)|[1-9]\d*(?:\.\d{1,2})?)(?:e[+-]?\d+)?$
哪里
(?:0\.(?:0[1-9]|[1-9]\d?)
匹配小于 1 且最多保留 2 位小数的正数[1-9]\d*(?:\.\d{1,2})?
匹配等于或大于1的正数,可选最多2位小数(?:e[+-]?\d+)?
可选匹配科学记数法
注意事项:
- 不允许有前导零
- 不允许
.
没有小数位(可以使用\.\d{0,2}
修复) - 由于电子符号(例如 1e-3),可以有更多的小数位
- 应该使用 i-Modifier
- 您可能只想使用您的语言能力来解析和比较浮点值