python正则表达式跳过可选单词不起作用

时间:2017-12-22 06:14:15

标签: python regex

我一直在尝试找到匹配项,如果它们存在,它们可能是字符串中的可选单词,需要被忽略。

我尝试的代码是:

    import re
    str = '''
         topping consensus estimates 
         topping analysis' consensus estimate
         topping estimate
    '''
    for m in re.finditer(r'(?P<p3c>topping\s+(?:\w+\s(?!estimate)){0,2}(estimate))',str):
        print(m.group())
    print('done')

我希望在字符串中找到所有三个案例,但只能获得最后一个案例。我想在顶部和估计之间跳过最多两个字,但不能保证它们将是分析和共识。我尝试使用(?:\w+\s(?!estimate)){0,2}跳过最多两个字来获得结果,但由于某种原因它无效。

1 个答案:

答案 0 :(得分:4)

你不需要得到&#34;顶部估计&#34;作为结果。您真正想要的是检查每行是以topping开头,后跟2个或更少的单词,然后是estimateestimates

这个正则表达式可以帮助你:

^topping(\s\S+){0,2}\sestimates?\s*$

如果您打开m,则将其与每行匹配,或与多行匹配。它会告诉你字符串是否满足要求。