Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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

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/Kivy/Regex)_Python_Regex_Filter_Compilation_Textinput - Fatal编程技术网

只允许浮点数,带一个小数点和一个负号(Python/Kivy/Regex)

只允许浮点数,带一个小数点和一个负号(Python/Kivy/Regex),python,regex,filter,compilation,textinput,Python,Regex,Filter,Compilation,Textinput,首先,我想说我对这门语言非常陌生,但我已经在我的计算器应用程序中深入了解了简单的物理方程。我的计划是先用另一个计算屏幕制作一个主屏幕,一旦我能做到最好,我将继续使用其他屏幕 在这个特定的屏幕上(可能还有我必须使用这个函数的大多数其他屏幕),我建立了一个自定义文本输入,只允许数字0-9和一个小数点。然而,我目前正在绞尽脑汁,试图弄清楚如何在我允许的输入集中包含否定符号 代码如下:(我发现它是开源的,我理解它的逻辑,但我还没有完全理解re.compile函数) 类浮动输入(TextInput): p

首先,我想说我对这门语言非常陌生,但我已经在我的计算器应用程序中深入了解了简单的物理方程。我的计划是先用另一个计算屏幕制作一个主屏幕,一旦我能做到最好,我将继续使用其他屏幕

在这个特定的屏幕上(可能还有我必须使用这个函数的大多数其他屏幕),我建立了一个自定义文本输入,只允许数字0-9和一个小数点。然而,我目前正在绞尽脑汁,试图弄清楚如何在我允许的输入集中包含否定符号

代码如下:(我发现它是开源的,我理解它的逻辑,但我还没有完全理解re.compile函数)

类浮动输入(TextInput):
pat=re.compile(“[^0-9]”)从:

如果
-
被转义(例如
[a \-z]
),或者如果它被放置为第一个或最后一个字符(例如
[-a]
[a-]
),它将匹配一个文本
'-'

要获得与0-9,-或+以外的任何内容匹配的模式,可以使用

pat=re.compile(“[^0-9\-+]”)

> p>而不是从字符串中替换无关字符,您想考虑用户是否以正确的格式输入数字?

如果是,请尝试使用re.match和probe user输入正确的格式,直到正确为止

请尝试此代码以符合您对-ve浮点数的要求

re.match('^-{0,1}[0-9]*(.[0-9]+){0,1}$', '-1.1000008')
我尝试了几个反面的例子并进行了测试。如果缺少任何内容,请随时修改

关于这个正则表达式字符串的一些信息

^ -> starts with
$ -> ends with
{0,1} -> 0 - 1 occurrence only
* -> Zero or more times
+ -> One or more times
() -> group
您也可以将此字符串放入re.compile。 重新匹配输出匹配(如果有),否则无


干杯,

您好,这只是一个后续问题,您能否声明只允许使用一个负号(在re.compile中)?还是我必须改变我的全部代码?此外,re.match似乎对我不起作用-就代码而言,我可能需要修改它,而不仅仅是坚持现有的。嗨,Gleb,前面的代码只处理一个负号(零或一)。您可能需要检查是否存在匹配,然后继续计算,否则,请用户添加正确的数字。您可以将匹配字符串放入re.compile()中。请正确格式化代码。您不必尖叫
^ -> starts with
$ -> ends with
{0,1} -> 0 - 1 occurrence only
* -> Zero or more times
+ -> One or more times
() -> group