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

时间:2019-04-04 21:51:32

标签: python regex

我正在使用Kivy(正则表达式)对re进行“语法分析器”之类的操作。

我只想检查基本操作的有效语法(例如+ |-| * | / |(|))。 用户用字符串将字符串录音(使用键盘),然后使用正则表达式对其进行验证。 但是我不知道如何在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

2 个答案:

答案 0 :(得分:0)

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

如果您对此live on regex101.com进行测试,则可以立即看到它,并且它与整个字符串不匹配,而只是部分字符串。

我已经纠正了您character classes中的两个错误,这些错误涉及使用不必要/有害的交替运算符(|)和破折号的不正确放置,从而使其成为范围运算符({{1 }}),但还是不正确。

认为,您想要更多类似这样的东西:

-

测试live on regex101.com

答案 1 :(得分:0)

这回答了有关正则表达式如何使用的问题:
注意事项:正则表达式不会清除所有无效输入,例如,两个小数点(“ ..”),两个运算符(“ ++”)等。因此,请根据您的实际需求进行调整)

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