负前瞻正则表达式python

时间:2018-07-20 05:15:42

标签: python regex regex-negation

我有一个字符串列表,如果前面没有“ and”,我想匹配一个关键字。但是,如果“和”后面有另一个单词,我想添加关键字。考虑到“和”在所有字符串中的位置都不相同。

在下面的示例中,仅当单词“ book”不在“ and”之后时,我才想匹配具有“ book”一词的字符串,除非“ and”之前带有“ tall”(第一个和我列表中的第三项)。我的尝试是使用

^((?!((?<!tall)\band\b)).)*book

,但是它不起作用。我不确定是否可以在否定前瞻的后面加入否定后瞻

  1. 是一本又高又宽的书

  2. 是一台计算机和一本说明书

  3. 封面精美的书

4。戴好耳机的电脑

2 个答案:

答案 0 :(得分:0)

我会在正反两面交替使用这句话:

((?<!\band )|(?<=\btall and ))book

Demo

如果满足以下两个条件之一,则此处的逻辑是匹配单词book

  • book之前根本没有单词and
  • book之前是and,而tall之前是

我不费力地包含任何Python代码,但是根据我在您的问题中所搜集到的内容,肉和土豆正在弄清楚正则表达式,而不是Python代码。

答案 1 :(得分:0)

我发现我的方法并非完全错误。当我取出第一个边界时,它会起作用。

^((?!((?<!tall) and\b)).)*book

我不知道为什么在包含该边界时为什么它不起作用。但这有效。谢谢