我正在使用Kivy
做类似“语法分析器”的事情,使用re
(常规表达式)。
我只想检查基本操作的有效语法(如|-|*|/|(|))。用户将字符串(用键盘)粘贴到磁带上,我用regex对其进行验证。但我不知道如何在if语句中使用regex。我想要的是:如果用户带给我的字符串不正确(或者没有使用regex检查),请打印类似“inavlid string”的内容,如果正确,请打印“Valid string”。
我尝试过:
if re.match(patron, string) is not None:
print ("\nTrue")
else:
print("False")
但是,不管字符串是什么,应用程序总是显示为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")
但如果我把一个a
这样的53.22 22.11 10*555 62 55.2-66
它是不正确的,应用程序必须打印无效...
这回答了您关于如何将if与正则表达式一起使用的问题:
注意:正则表达式不会清除所有无效的输入,例如,两个小数点("...")、两个运算符 (" "), 等等。所以请调整它以适应您的确切需要)
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
您的正则表达式始终匹配,因为它允许空字符串匹配(因为整个正则表达式包含在可选组中。
如果您在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.
在regex101.com.上测试
问题内容: 我正在寻找某种if语句来控制不同元素的状态。 我已经尝试了以下内容,但无法编译 问题答案: LESS具有用于mixin的保护表达式,而不是单个属性。 因此,您将创建一个像这样的mixin: 并通过调用或(或完全不调用)将其打开或关闭。
问题内容: 如何在JSON中使用if语句这是代码:............................................... .................................................................. 这是必需的结果,如下所示: 实际上,这种方式是错误的,并且会导致JavaScript语法错误。 问题答案: 那是普通的J
我只是在写一个简单的if语句。第二行仅在用户键入“Good!”时计算为true。如果键入“Great!”,则将执行else语句。我可以不使用或像这样吗?我需要逻辑的还是逻辑的?
我试图找出如何将regex合并到python if语句中。我有一个pandas数据框架,在其中我迭代行,并希望在每一行具有特定的文本组合时执行一个操作。正则表达式应匹配任何以大写字母开头,后跟6个数字(即R142389)的7个字符串 我这样做对吗?任何帮助都将不胜感激!
问题内容: 在C语言中非常常见:像这样入侵“空if语句”: 它在Python中工作吗?我的意思是,我们可以通过使用它来提高应用程序的性能吗?我也想知道为什么。 问题答案: 如果“ if”中没有其他情况,则性能会得到改善,因为字节码不会将执行传递给“ if”情况。 这是一些功能和输出 以下示例应用程序: 分解为: 以下 分解为:
行动时刻 - 在unlang中使用if语句 if语句本身并不复杂。 它具有以下格式: if(condition){ ... } 由于其许多可能性,条件部分可能变得复杂。 使用if语句获取返回码 我们现在将查看模块的返回代码,并使用此代码与指定的条件进行比较。 FreeRADIUS中的每个模块都需要在调用时返回代码。 随后可以将此代码的值用作if语句中的条件检查。 使用if语句授权用户 如