【问题标题】:negative lookahead regular expression python负前瞻正则表达式python
【发布时间】:2018-12-28 08:24:43
【问题描述】:

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

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

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

但它不起作用。我不确定是否可以在否定前瞻中包含否定查看

  1. 是一本又高又宽的书

  2. 是一台电脑和一本说明书

  3. 封面漂亮的书

4. 带漂亮耳机的电脑

【问题讨论】:

    标签: python regex regex-negation


    【解决方案1】:

    我会使用前后交替的正面和负面的交替来表达这一点:

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

    Demo

    这里的逻辑是如果以下两个条件之一为真,则匹配单词book

    • book 前面根本没有 and 这个词
    • book 前面是 and,而 tall 前面也是

    我没有费心包含任何 Python 代码,但根据我在您的问题中收集到的信息,肉和土豆正在找出正则表达式,而不是 Python 代码。

    【讨论】:

    • 谢谢,我唯一的不便是我不知道“and”的确切位置,如果它在“book”之前,我认为你的答案会起作用。但是,在我的真实列表中,“和”的位置变化很大
    • 那你需要改写你的问题,否则你给出的正则表达式逻辑不适合你的实际问题。
    • 谢谢,你说的很对,我只是改写一下
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2021-10-11
      • 2011-10-14
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多