Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Regex将检测;无效浮动“;_Python_Regex - Fatal编程技术网

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
。。并在
范围内添加
通过
,但
除外。我是不是太执着了?