只允许浮点数,带一个小数点和一个负号(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)的主要内容,如果未能解决你的问题,请参考以下文章