【问题标题】:How to match two equal string with IF statement in python如何在python中用IF语句匹配两个相等的字符串
【发布时间】:2015-12-17 05:26:51
【问题描述】:

我的 Python 代码:

import re

output = "your test contains errors"    

match2 = re.findall('(.* contains errors)',output)
mat2 = "['your test contains errors'] "

if match2 == mat2:
    print "PASS"

在上面的python程序中,我在'match2'和mat2中有字符串。如果相同,则应打印 PASS。

如果我运行这个程序,我没有收到任何错误。如果我打印“match2”和“mat2”给出相同的输出。但是如果我使用“if match2 == mat2”,则不会打印为“PASS”。

谁能帮我解决这个问题。

提前致谢。

谢谢,

库马尔。

【问题讨论】:

  • 作为调试的一般规则,请始终尝试在交互或解释器模式下打印或检查返回值。这有助于避免因琐碎问题而头疼的问题。

标签: python regex python-2.7


【解决方案1】:

re.findall 返回一个列表,而不是一个字符串。所以mat2 也应该是一个列表:

mat2 = ['your test contains errors']

如果要检查字符串中的your test contains errors,可以使用in操作符:

if "your test contains errors" in output:
    print "PASS"

【讨论】:

    【解决方案2】:

    如果您正在测试字符串匹配,您应该比较字符串并且使用 re.search 就足够了:

    output = "your test contains errors"
    
    match2 = re.search('(.* contains errors)',output)
    mat2 = 'your test contains errors'
    if match2 and match.group() == mat2:
        print "PASS"
    

    findall 也会返回多个匹配项,因此如果有多个匹配项,即使使用 mat2 = ['your test contains errors'] 也会失败。

    您的正则表达式方法实际上没有意义,如果您要比较两个字符串是否基于 在上面的 python 程序中,我在“match2”和 mat2 中有字符串。如果相同,它应该打印 PASS。 你是,那么你根本不应该使用正则表达式:

    output = "your test contains errors"     
    mat2 = 'your test contains errors'
    
    if output == mat2:
        print "PASS"
    

    你的正则表达式相当于str.startswith,所以很简单:

    if output.startswith(mat2):
        print "PASS"
    

    也会这样做。

    您的正则表达式方法将匹配子字符串:

    import re
    
    output = "foo your test contains errors"
    
    match2 = re.findall('(.* contains errors)',output)
    
    print(match2)
    

    输出:

     ['foo your test contains errors']
    

    因此,使用正则表达式获得匹配的唯一方法是字符串以 your test ... 开头,str.startswith 可以在不需要正则表达式的情况下进行测试。

    因此,如果您想查找字符串是否以'your test contains errors' 开头,请使用str.startswith,如果您只想查找contains errors 是否在字符串中,请使用if "contains errors" in output 或等效使用if match2:,使用搜索作为这将查找"contains errors" 是否在您的字符串中,前面有任何字符。

    您也可以使用if 'your test contains errors' 来查找子字符串是否在字符串中的任何位置,但这不是您的正则表达式正在做的事情。

    【讨论】:

    • @falsetru,您可以使用 group 来检查 mat2 但正则表达式根本没有意义,因为 OP 正在检查完全匹配
    • 感谢您的回答。这是有道理的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2023-02-16
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多