我正在使用Kivy
(正则表达式)对re
进行“语法分析器”之类的操作。
我只想检查基本操作的有效语法(例如+ |-| * | / |(|))。 用户用字符串将字符串录音(使用键盘),然后使用正则表达式对其进行验证。 但是我不知道如何在if语句中使用正则表达式。我想要的是:如果用户带给我的字符串不正确(或不与正则表达式进行检查),则显示类似“无效字符串”的内容,如果正确,则显示“有效字符串”。
我尝试过:
if re.match(patron, string) is not None:
print ("\nTrue")
else:
print("False")
但是,string
拥有什么并不重要,应用程序始终显示True
。
抱歉,我的英语不好。任何帮助将不胜感激!
import re
patron= re.compile(r"""
(
-?\d+[.\d+]?
[+*-/]
-?\d+[.\d+]?
[+|-|*|/]?
)*
""", re.X)
obj1= self.ids['text'].text #TextInput
if re.match(patron, obj1) is not None:
print ("\nValid String")
else:
print("Inavlid string")
if obj1= "53.22+22.11+10*555+62+55.2-66"
实际上是正确的,并且应用程序会显示“有效...”,但是如果我将a
这样的"a53.22+22.11+10*555+62+55.2-66"
放进去,那是不正确的,因此应用程序必须显示invalid..
,但是相反,它仍然valid
。
答案 0 :(得分:0)
您的正则表达式始终匹配,因为它允许空字符串匹配(因为整个正则表达式包含在可选组中。
如果您对此live on regex101.com进行测试,则可以立即看到它,并且它与整个字符串不匹配,而只是部分字符串。
我已经纠正了您character classes中的两个错误,这些错误涉及使用不必要/有害的交替运算符(|
)和破折号的不正确放置,从而使其成为范围运算符({{1 }}),但还是不正确。
我认为,您想要更多类似这样的东西:
-
答案 1 :(得分:0)
这回答了有关正则表达式如何使用的问题:
注意事项:正则表达式不会清除所有无效输入,例如,两个小数点(“ ..”),两个运算符(“ ++”)等。因此,请根据您的实际需求进行调整)
import re
regex = re.compile(r"[\d.+\-*\/]+")
input_list = [
"53.22+22.11+10*555+62+55.2-66", "a53.22+22.11+10*555+62+55.2-66",
"53.22+22.pq11+10*555+62+55.2-66", "53.22+22.11+10*555+62+55.2-66zz",
]
for input_str in input_list:
mmm = regex.match(input_str)
if mmm and input_str == mmm.group():
print('Valid: ', input_str)
else:
print('Invalid: ', input_str)
作为单个字符串而不是列表使用的函数:
import re
regex = re.compile(r"[\d.+\-*\/]+")
def check_for_valid_string(in_string=""):
mmm = regex.match(in_string)
if mmm and in_string == mmm.group():
return 'Valid: ', in_string
return 'Invalid: ', in_string
check_for_valid_string('53.22+22.11+10*555+62+55.2-66')
check_for_valid_string('a53.22+22.11+10*555+62+55.2-66')
check_for_valid_string('53.22+22.pq11+10*555+62+55.2-66')
check_for_valid_string('53.22+22.11+10*555+62+55.2-66zz')
输出:
## Valid: 53.22+22.11+10*555+62+55.2-66
## Invalid: a53.22+22.11+10*555+62+55.2-66
## Invalid: 53.22+22.pq11+10*555+62+55.2-66
## Invalid: 53.22+22.11+10*555+62+55.2-66zz