【问题标题】:Allowing only float numbers, with one decimal point, AND A NEGATIVE SIGN (Python/Kivy/Regex)只允许浮点数,带一个小数点和一个负号(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)

【问题讨论】:

标签: python regex filter compilation textinput


【解决方案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() 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2017-06-05
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多