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

2024-09-02 05:01:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我只想检查基本操作的有效语法(比如+|-|*|/|(|))。 用户将字符串(用键盘)录下来,我用regex验证它。 但我不知道如何在if语句中使用regex。我想要的是:如果用户给我带来的字符串不正确(或者没有用正则表达式检查),那么打印类似“inavlid string”的内容,如果是正确的,则打印“Valid string”。在

我试过:

if re.match(patron, string) is not None:
    print ("\nTrue")
else:
    print("False")

但是,不管string有什么功能,应用程序总是显示True。在

对不起,我的英语不好。任何帮助将不胜感激!在

^{pr2}$

if obj1= "53.22+22.11+10*555+62+55.2-66"实际上它是正确的,并且应用程序打印“有效…”,但是如果我把a这样"a53.22+22.11+10*555+62+55.2-66"这样的"a53.22+22.11+10*555+62+55.2-66"就不正确了,应用程序必须打印invalid..,但它仍然是{}。在


Tags: 字符串用户re应用程序内容stringif语法
2条回答

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

如果您测试这个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。在

这回答了您关于如何将if与regex一起使用的问题:
注意事项: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)

作为用于单个字符串而不是列表的函数:

^{pr2}$

输出:

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

相关问题 更多 >