Python:如何使用正则表达式

时间:2016-11-29 07:39:25

标签: python regex

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

这是他们的一种方式,只有当三个单词中的一个出现时才选择行?

2 个答案:

答案 0 :(得分:1)

没有人会建议在生产代码中使用正则表达式执行此操作,但为了完整起见,这是使用positive and negative lookaheads的答案:

^(?:(?=.*PASSED)(?!.*(?:FAILED|SKIPPED))|(?=.*FAILED)(?!.*(?:PASSED|SKIPPED))|(?=.*SKIPPED)(?!.*(?:FAILED|PASSED)))

基本上,它要做的是提前确保字符串包含您想要的任何一个单词,然后再向前看以确保它不包含其他两个单词。

Demo on Regex101

答案 1 :(得分:1)

如何使用re.findall而仅检查1个项目匹配,仅当re.findall仅返回单个匹配项时才匹配为真

regular_expression = re.compile(r'SKIPPED|PASSED|FAILED')
match = len(regular_expression.findall(line)) == 1