gpt4 book ai didi

regex - 明智地解析科学记数法?

转载 作者:行者123 更新时间:2023-12-03 07:01:57 29 4
gpt4 key购买 nike

我希望能够编写一个函数,该函数以字符串形式接收科学记数法中的数字,并将系数和指数拆分为单独的项目。我可以只使用正则表达式,但传入的数字可能不会标准化,我更希望能够标准化然后分解各个部分。

一位同事已经使用 VB6 获得了部分解决方案,但还没有完全实现,如下面的文字记录所示。

cliVe> a = 1e6
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 10 exponent: 5

应该是 1 和 6

cliVe> a = 1.1e6
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.1 exponent: 6

正确

cliVe> a = 123345.6e-7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: -2

正确

cliVe> a = -123345.6e-7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: -2

应该是 -1.233456 和 -2

cliVe> a = -123345.6e+7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: 12

正确

有什么想法吗?顺便说一句,Clive 是一个基于 VBScript 的 CLI,可以在我的 weblog 上找到。

最佳答案

Google 在 "scientific notation regexp" 上显示了许多匹配项,包括使用的 this one(不要使用它!!!!)

*** warning: questionable ***
/[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/

其中包括 -.5e7 和 +00000e33 等情况(您可能不想允许这两种情况)。

相反,我强烈建议您使用 Doug Crockford 的 JSON website 上的语法,它明确记录了 JSON 中数字的构成。以下是取自该页面的相应语法图:

alt text
(来源:json.org)

如果您查看 json2.js 脚本的第 456 行(在 javascript 中与 JSON 进行安全转换),您将看到正则表达式的这一部分:

/-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/

具有讽刺意味的是,它与他的语法图不匹配......(看起来我应该提交一个错误)我相信确实实现该语法图的正则表达式是这样的:

/-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?\d+)?/

如果你也想允许首字母+,你会得到:

/[+\-]?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?\d+)?/

根据您的喜好添加捕获括号。

我还强烈建议您充实一堆测试用例,以确保包含您想要包含(或不包含)的可能性,例如:

allowed:
+3
3.2e23
-4.70e+9
-.2E-4
-7.6603

not allowed:
+0003 (leading zeros)
37.e88 (dot before the e)

祝你好运!

关于regex - 明智地解析科学记数法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638565/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com