Python正则表达式来匹配特定单词

Python正则表达式来匹配特定单词,python,regex,match,Python,Regex,Match,我想匹配测试报告中包含单词“Not Ok”的所有行。 文本的示例行: 'Test result 1: Not Ok -31.08' 我试过这个: filter1 = re.compile("Not Ok") for line in myfile: if filter1.match(line): print line 这应该根据工作,但我没有得到任何输出。有什么想法吗,有什么问题吗?测试了各种其他

我想匹配测试报告中包含单词“Not Ok”的所有行。 文本的示例行:

'Test result 1: Not Ok -31.08'
我试过这个:

filter1 = re.compile("Not Ok")
for line in myfile:                                     
    if filter1.match(line): 
       print line

这应该根据工作,但我没有得到任何输出。有什么想法吗,有什么问题吗?测试了各种其他参数,如“.”和“^Test”,这些参数工作正常

您应该在此处使用
re.search
而不是
re.match

从上的
re.match

如果要在字符串中的任何位置查找匹配项,请改用search()

如果要查找确切的单词
“Not Ok”
,请使用
\b
单词边界,否则 如果只查找子字符串
“不正常”
,请在字符串中使用simple:
if“Not Ok”

>>> strs = 'Test result 1: Not Ok -31.08'
>>> re.search(r'\bNot Ok\b',strs).group(0)
'Not Ok'
>>> match = re.search(r'\bNot Ok\b',strs)
>>> if match:
...     print "Found"
... else:
...     print "Not Found"
...     
Found
你可以用

if <keyword> in str:
    print('Found keyword')

在这种情况下,绝对不需要使用正则表达式!只需使用:

s = 'Test result 1: Not Ok -31.08'
if s.find('Not Ok') > 0 : 
    print("Found!")
或者如前所述:

if 'Not Ok' in s:
    print("Found!")

如果是特定字符串,为什么要使用正则表达式?为什么不
如果第行中的“not Ok:
?顺便说一句,
re.match()
只匹配字符串的开头。我确信match不能只匹配字符串的开头。。$不应该匹配行尾吗?也许我不清楚:
re.match(“a”)
re.search(“a”)相同
re.match(“Not Ok”)
将为
返回
True
“Not Ok Joe!”
并为
返回
False
“It Not Ok!”
。啊,我明白了。从Python文档中不太清楚。每天学习新的东西!事实上,即使没有任何额外的东西,这种方法也能奏效。谢谢我还发现re.findall在这种情况下起作用。@casper如果没有
\b
它也会返回
True
类似的内容:
'KNot Oke'
re.findall
返回所有非重叠匹配项的列表,用于检查
re.search
是最佳选择。
if 'Not Ok' in s:
    print("Found!")