Python Regex将检测;无效浮动“;
我正在寻找一个正则表达式来检测无效的浮点数,因为它们不能有两个小数点。以下是我所拥有的,但它不起作用:Python Regex将检测;无效浮动“;,python,regex,Python,Regex,我正在寻找一个正则表达式来检测无效的浮点数,因为它们不能有两个小数点。以下是我所拥有的,但它不起作用: REAL = re.compile("^\d+\.\d+$") 编辑:我正在使用python。总而言之,我正在编写一个lexer来识别C语法的一个微型版本。A 2.3.4被视为无效,但A 13.4.5则不是。我想这与此有关 很抱歉这个格式不好的问题。在阅读了一些注释之后,我在代码的其他地方发现了错误。事实证明,在我的代码前面使用re.compile(“0”)和re.compile(“1”)
REAL = re.compile("^\d+\.\d+$")
编辑:我正在使用python。总而言之,我正在编写一个lexer来识别C语法的一个微型版本。A 2.3.4被视为无效,但A 13.4.5则不是。我想这与此有关
很抱歉这个格式不好的问题。在阅读了一些注释之后,我在代码的其他地方发现了错误。事实证明,在我的代码前面使用
re.compile(“0”)和re.compile(“1”)
会导致任何以1/0开头的序列被“拾取”为有效序列,不管序列的剩余部分是什么。只需添加“0$”和“1$”
即可解决我的问题。更简单的方法是:
floatStr = '12.3.4'
try:
float(floatStr)
except ValueError:
# do something
pass
换句话说:尝试解析字符串,如果失败,那是因为格式不是浮点数。这里不需要乱用正则表达式(有效浮点数的格式可能有点棘手),只需让标准转换函数为您完成繁重的工作 您的问题实际上根本不在这段代码中 快速测试表明,使用
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'
。同样,如果没有看到您的代码,没有人能猜出发生这种情况的确切原因…语言是什么?请阅读您使用的标签说明。@dystroy这看起来像蟒蛇,看起来正确。什么字符串起作用/不起作用?@聪明,请提供更多上下文。到底是什么不起作用?一些投入和预期的产出会有所帮助。你是如何运行你的测试的?什么是“不工作”的意思?如果我获取您的代码,然后执行REAL.match('13.4.5')
,它将返回None
,与1.3.4
完全相同。我的猜测是,在你的lexer中的某个地方有一个问题导致,13.4
传递到此正则表达式,而.5
作为另一个标记。但是如果你对你的代码一无所知,就无法猜测是什么原因造成的。这并不能解决他的问题。它通过带有两个小数位的浮点,如12.34
,这是他特别说要停止的。@abarnert我想他是指两个
s中的两个“小数位”。@abarnert看到另一个评论,A.R.s.是对的。@A.R.s:是的,看起来他改变了他的问题,首先给出一个例子13.4.5
,然后将“小数点”改为“小数点”。所以,这是在回答他想问的问题,这比回答他实际问的问题更好我仍然不会使用变量名str
。。并在范围内添加通过
,但
除外。我是不是太执着了?