繁体   English   中英

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

[英]How to use RegEx in an if statement in Python?

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

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

我尝试过:

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..但是,它仍然valid

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

如果您在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上进行实时测试。

这回答了有关正则表达式如何使用的问题:
注意 :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)

上面是一个用于单个字符串而不是列表的函数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM