当前位置: 首页 > 知识库问答 >
问题:

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

仲孙超
2023-03-14

我正在使用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它是不正确的,应用程序必须打印无效...


共有2个答案

元景天
2023-03-14

这回答了您关于如何将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
越新霁
2023-03-14

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

如果您在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语句授权用户 如