一个效果很好的正则表达式是:
-?[\d.]+(?:e-?\d+)?
Run Code Online (Sandbox Code Playgroud)
转换为数字可以这样完成:科学记数法中的字符串C++来双转换,我想.
正则表达式是
-? # an optional -
[\d.]+ # a series of digits or dots (see *1)
(?: # start non capturing group
e # "e"
-? # an optional -
\d+ # digits
)? # end non-capturing group, make optional
Run Code Online (Sandbox Code Playgroud)
**1)这不是100%正确,技术上只有一个点,在它之前只有一个(或没有)数字.但实际上,这不应该发生.所以正则表达式是一个很好的近似值,误报应该是不太可能的.随意使正则表达式更具体.*
我尝试了许多其他解决方案,但都无济于事,所以我想出了这个。
^(-?\d+)\.?\d+(e-|e\+|e|\d+)\d+$
Run Code Online (Sandbox Code Playgroud)

任何匹配的内容都被视为有效的科学记数法。
请注意:这接受e+,e-和e; 如果您不想接受e,请使用:^(-?\d+)\.?\d+(e-|e\+|\d+)\d+$
我不确定它是否适用于 c++,但在 c# 中,您可以在正则表达式中的和(?i)之间添加,以切换内联不区分大小写。没有它,声明类似的指数将无法被识别。^(-1.05E+10
编辑:我之前的正则表达式有点问题,所以我用上面的正则表达式替换了它。