正则表达式检测“无效的浮动”

时间:2013-03-22 20:25:17

标签: python regex

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

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$"即可修复我的问题。

2 个答案:

答案 0 :(得分:2)

更简单的方法是这样做:

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

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

答案 1 :(得分:1)

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

快速测试显示,REAL = re.compile("^\d+\.\d+$")re.match('13.4.5')返回None,就像re.match('2.3.4')一样。

问题必定是某些早期代码以某种方式匹配'13.4.5'导致它吃剩余的令牌,或吃掉剩余的令牌(例如'4.5')是一个有效的浮动。没有看到你的代码,没有人能猜到问题到底是什么。

但是,事实证明,你有另一个匹配'1'没有终止符的正则表达式,所以无论你用什么代码构建lexemes的正则表达式匹配都接受所有'13.4.5'。再一次,没有看到你的代码,没有人能猜到为什么会发生这种情况......