gpt4 book ai didi

python - 如何在 Python 的 if 语句中使用 RegEx?

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:20 25 4
gpt4 key购买 nike

我正在用 Kivy 使用 re (正则表达式)做类似“语法分析器”的事情。

我只想检查基本操作的有效语法(例如 +|-|*|/|(|))。用户粘贴字符串(使用键盘),然后我使用正则表达式对其进行验证。但我不知道如何在 if 语句中使用正则表达式。我想要的是:如果用户给我带来的字符串不正确(或未使用正则表达式检查),则打印“inavlid string”之类的内容,如果正确,则打印“Valid string”。

我尝试过:

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.. 但它仍然有效

最佳答案

您的正则表达式始终匹配,因为它允许空字符串匹配(因为整个正则表达式包含在可选组中。

如果你测试这个live on regex101.com ,您可以立即看到这一点,而且它不匹配整个字符串,而只匹配其中的一部分。

我已经纠正了您的 character classes 中的两个错误关于使用不必要/有害的交替运算符 (|) 以及破折号的不正确位置,使其成为范围运算符 (-),但它仍然是不正确的。

认为你想要更多类似这样的东西:

^               # 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.

测试一下 live on regex101.com .

关于python - 如何在 Python 的 if 语句中使用 RegEx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55525453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com