- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 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/
我是一名优秀的程序员,十分优秀!