16

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

'Test result 1: Not Ok -31.08'

我试过这个:

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

这应该根据http://rubular.com/工作,但我在输出中什么也没得到。任何想法,可能有什么问题?测试了各种其他参数,例如“。” 和 "^Test" ,它们工作得很好。

4

3 回答 3

38

你不应该re.search在这里使用re.match

从上的文档re.match

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

如果您要查找确切的单词,'Not Ok'则使用\b单词边界,否则,如果您只查找子字符串'Not Ok',则使用 simple : if 'Not Ok' in string

>>> 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
于 2013-06-13T14:52:21.773 回答
6

你可以简单地使用,

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

例子:

if 'Not Ok' in input_string:
    print('Found string')
于 2017-02-27T19:34:06.023 回答
0

在这种情况下绝对不需要使用 RegEx!只需使用:

s = 'Test result 1: Not Ok -31.08'
if s.find('Not Ok') > 0 : 
    print("Found!")

或如前所述:

if 'Not Ok' in s:
    print("Found!")
于 2018-09-26T10:32:05.580 回答