我正在寻找一个正则表达式来检测无效的浮点数,因为它们不能有两个小数点。这是我的,但它不起作用:
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$"
即可修复我的问题。
答案 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'
。再一次,没有看到你的代码,没有人能猜到为什么会发生这种情况......