如何在python中匹配两个相等的字符串和IF语句

时间:2015-09-20 12:41:24

标签: python regex python-2.7

我的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。

如果我运行此程序,我没有收到任何错误。如果我打印"匹配2"和" mat2"给出相同的输出。但如果我使用"如果match2 == mat2"没有打印为' PASS'。

任何人都可以帮我解决这个问题。

提前致谢。

谢谢,

库马尔。

2 个答案:

答案 0 :(得分:3)

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

mat2 = ['your test contains errors']

如果您想检查字符串中的your test contains errors,可以使用in运算符:

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

答案 1 :(得分:1)

如果您正在测试字符串匹配,则应该比较字符串并使用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"在您的字符串中,前面跟着任何字符,就会发现{<1}}。

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