[英]How to use RegEx in an if statement in Python?
我正在用re
(常规表达式)用Kivy
做类似“语法分析器”的事情。
我只想检查基本操作的有效语法(例如+ |-| * | / |(|))。 用户用字符串将字符串录音(使用键盘),然后使用正则表达式对其进行验证。 但是我不知道如何在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
。
您的正则表达式始终匹配,因为它允许空字符串匹配(因为整个正则表达式包含在可选组中)。
如果您在regex101.com上进行了实时测试,则可以立即看到它,并且它与整个字符串不匹配,而仅与部分字符串匹配。
我已经纠正了字符类中的两个错误,这些错误涉及不必要/有害的交替运算符( |
)的使用以及破折号的不正确放置,从而使它成为范围运算符( -
),但这仍然是不正确的。
我想您想要更多类似这样的东西:
^ # Make sure the match begins at the start of the string
(?: # Start a non-capturing group that matches...
-? # an optional minus sign,
\d+ # one or more digits
(?:\.\d+)? # an optional group that contains a dot and one or more digits.
(?: # Start of a non-capturing group that either matches...
[+*/-] # an operator
| # or
$ # the end of the string.
) # End of inner non-capturing group
)+ # End of outer non-capturing group, required to match at least once.
(?<![+*/-]) # Make sure that the final character isn't an operator.
$ # Make sure that the match ends at the end of the string.
这回答了有关正则表达式如何使用的问题:
注意 :regex公式不会清除所有无效输入,例如,两个小数点(“ ..”),两个运算符(“ ++”)等。 因此,请根据您的实际需求进行调整)
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.