我检查了所有相关问题,但看起来后台不允许我的模式中需要的单词。 所以这是我的问题:
我需要匹配这种模式:
word1.*word3
但如果内部有word2,请不要匹配,例如:
word1 word2 word3
有没有办法用单行正则表达式做到这一点?我用2个正则表达式做了这个,但我发现它有点乱:)
答案 0 :(得分:4)
您正在寻找tempered dot:
word1(?:(?!word2).)*?word3
^ un-greedy
在非捕获组内,每次提前,否则应该传递否定前瞻,否则下一个直接字符不匹配,整个提示失败。
答案 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])