-1

我正在寻找一个正则表达式来检测无效的浮点数,因为它们不能有两个小数点。这是我所拥有的,但它不起作用:

REAL = re.compile("^\d+\.\d+$")

编辑:我正在使用python。总的来说,我正在编写一个词法分析器来识别 C 语法的微型版本。2.3.4 被认为是无效的,但 13.4.5 不是。我想这与此有关。


抱歉,问题格式不正确。在阅读了一些评论后,我在代码的其他地方发现了错误。事实证明,re.compile("0") and re.compile("1")在我的代码中使用前面的代码会导致任何以 1/0 开头的序列被“拾取”为有效,不管序列的其余部分如何。只需添加即可"0$" and "1$"解决我的问题。

4

2 回答 2

2

一个更简单的方法是这样做:

floatStr = '12.3.4'
try:
    float(floatStr)
except ValueError:
    # do something
    pass

换句话说:尝试解析字符串,如果解析失败,那是因为格式不是浮点数的格式。无需在这里乱用正则表达式(有效浮点数的格式可能有点难以正确) - 只需让标准转换函数为您完成繁重的工作!

于 2013-03-22T20:33:56.430 回答
1

您的问题实际上根本不在此代码中。

正如一个快速测试所示,使用REAL = re.compile("^\d+\.\d+$"),re.match('13.4.5')返回None,就像re.match('2.3.4').

问题一定是一些早期的代码'13.4.5'以某种方式匹配,导致它要么吃掉令牌的其余部分,要么吃掉足够多的东西以至于剩下的(例如,'4.5')是一个有效的浮点数。没有看到你的代码,没有人能猜出问题到底是什么。

但是,事实证明,你有另一个'1'没有终止符匹配的正则表达式,所以无论你必须从正则表达式匹配构建词位的任何代码都接受所有'13.4.5'. 同样,没有看到你的代码,没有人能猜出为什么会发生这种情况……</p>

于 2013-03-22T20:56:11.363 回答