正则表达式匹配模式但排除匹配内部的某些单词

时间:2018-03-03 13:34:50

标签: python regex

我检查了所有相关问题,但看起来后台不允许我的模式中需要的单词。   所以这是我的问题:

我需要匹配这种模式:

  word1.*word3

但如果内部有word2,请不要匹配,例如:

  word1 word2 word3

有没有办法用单行正则表达式做到这一点?我用2个正则表达式做了这个,但我发现它有点乱:)

2 个答案:

答案 0 :(得分:4)

您正在寻找tempered dot

word1(?:(?!word2).)*?word3
                    ^ un-greedy

Live demo

在非捕获组内,每次提前,否则应该传递否定前瞻,否则下一个直接字符不匹配,整个提示失败。

答案 1 :(得分:2)

正则表达式(请查看@ revo的答案以获取更多详细信息):

word1(?:(?!word2).)*word3 

这不会使用regex但它应该有效:

if word1 in your_string and word3 in your_string:
    w1 = your_string.index(word1)
    w3 = your_string.index(word3)

    if word2 not in your_string[w1, w3 + len(word3) - 1]:
        print(your_string[w1, w3 + len(word3) - 1])