regular_expression = re.compile(r'SKIPPED|PASSED|FAILED')
regular_expression.search(line)
上面的正则表达式将选择所有包含其中一个单词的行(SKIPPED | PASSED | FAILED)
问题是:它也选择以下行
TYPE TOTAL SKIPPED PASSED FAILED
---- ----- ------- ------ ------
Module 21 0 19 3
这是他们的一种方式,只有当三个单词中的一个出现时才选择行?
答案 0 :(得分:1)
没有人会建议在生产代码中使用正则表达式执行此操作,但为了完整起见,这是使用positive and negative lookaheads的答案:
^(?:(?=.*PASSED)(?!.*(?:FAILED|SKIPPED))|(?=.*FAILED)(?!.*(?:PASSED|SKIPPED))|(?=.*SKIPPED)(?!.*(?:FAILED|PASSED)))
基本上,它要做的是提前确保字符串包含您想要的任何一个单词,然后再向前看以确保它不包含其他两个单词。
答案 1 :(得分:1)
如何使用re.findall
而仅检查1个项目匹配,仅当re.findall
仅返回单个匹配项时才匹配为真
regular_expression = re.compile(r'SKIPPED|PASSED|FAILED')
match = len(regular_expression.findall(line)) == 1