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

Posted

技术标签:

【中文标题】只允许浮点数,带一个小数点和一个负号(Python/Kivy/Regex)【英文标题】:Allowing only float numbers, with one decimal point, AND A NEGATIVE SIGN (Python/Kivy/Regex) 【发布时间】:2020-10-11 01:46:39 【问题描述】:

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

在这个特定的屏幕中(可能还有其他大多数我必须使用此功能的屏幕)我已经建立了一个自定义 TextInput,它只允许数字 0-9 和一个小数点。但是,我目前正在努力弄清楚如何在我允许的输入集中包含一个否定符号。

这是代码:(我发现它是开源的,我了解物流,但我还没有完全了解re.compile函数)

class FloatInput(TextInput):

    pat = re.compile('[^0-9]') <----THIS IS WHERE I TRIED TO ADD ^[+-]? w/ NO LUCK :(
    def insert_text(self, substring, from_undo=False):

        pat = self.pat

        if '.' in self.text:
            s = re.sub(pat, '', substring)


        else:
            s = '.'.join([re.sub(pat, '', s) for s in substring.split('.', 1)])


        return super(FloatInput, self).insert_text(s, from_undo=from_undo)

【问题讨论】:

请正确格式化您的代码,click here to learn how。 你不必尖叫 【参考方案1】:

来自Python doc'n for the re module:

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

要获得匹配除 0-9、- 或 + 之外的任何值的模式,您可以使用

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

【讨论】:

【参考方案2】:

与其替换字符串中不相关的字符,您是否要考虑用户是否以正确的格式输入数字?

如果是这样,请尝试使用 re.match 并探测用户输入正确的格式,直到正确为止。

尝试使用此代码来满足您对 -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.match 输出匹配(如果有),否则无

干杯,

【讨论】:

你好,只是一个后续问题,你能断言只允许一个负号(在 re.compile 中)吗?还是我必须更改我的整个代码?此外,re.match 似乎对我没有用 - 就代码而言,我可能不得不修改它,而不仅仅是坚持我所拥有的。 嗨 Gleb,前面的代码只处理一个负号(零或一)。您可能需要检查是否有匹配,然后继续计算,否则,要求用户添加正确的数字。您可以将匹配字符串放在 re.compile() 中。

以上是关于只允许浮点数,带一个小数点和一个负号(Python/Kivy/Regex)的主要内容,如果未能解决你的问题,请参考以下文章

C 语言 哪个函数可以把 浮点数转换成字符串 带小数点 怎么做

Java中怎么把浮点数转变成整数只保留整数部分

第04部分:浮点数类型

Python中整数运算除法,输出带浮点数

怎么精确提取一个浮点数的小数部分?

适合网络攻城狮学习的Python——基本语法(整数浮点数)