我一直在寻找匹配项,它们可能是字符串中的可选词,如果它们存在,则需要忽略它们。
我尝试的代码是:

    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}跳过两个单词来得到结果,但由于某种原因,它不起作用。

最佳答案

你不需要得到“最高估计”作为结果。您真正想要的是检查每一行是否以topping开头,后跟2个或更少的单词,然后是estimate还是estimates
此正则表达式将帮助您:

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

将其与每一行或多行匹配(如果启用m)。它将告诉您字符串是否满足要求。

关于python - python regex跳过可选单词不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47936681/

10-10 15:27