我的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'。
任何人都可以帮我解决这个问题。
提前致谢。
谢谢,
库马尔。
答案 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'
来查找子字符串是否在您的字符串中的任何位置,但这不是您的正则表达式所做的。