gpt4 book ai didi

regex - 仅当文本包含白名单中的所有单词,但不包含黑名单中的所有单词时才匹配文本

转载 作者:行者123 更新时间:2023-12-01 07:43:40 25 4
gpt4 key购买 nike

我想通过这个例子更容易理解我想要实现的目标:

假设我们有这个白名单:one two three .还有这个黑名单:four five .然后:

  • three one two是匹配文本(包含所有白名单词);
  • one three two six是匹配文本(包含所有白名单词);
  • two one不是匹配的文本(缺少白名单词 three);
  • one four two three不是匹配的文本(包含黑名单词 four )。

  • 任何人都可以帮我解决这个案例的正则表达式吗?

    最佳答案

    这不是您想要使用正则表达式的东西。最好这样做(Python 中的示例):

    >>> whitelist = ["one", "two", "three"]
    >>> blacklist = ["four", "five"]
    >>> texts = ["three two one", "one three two six", "one two", "one two three four"]
    >>> for text in texts:
    ... mytext = text.split()
    ... if all(word in mytext for word in whitelist) and \
    ... not any(word in mytext for word in blacklist):
    ... print(text)
    ...
    three two one
    one three two six
    >>>

    不过,您可以这样做:
    ^(?=.*\bone\b)(?=.*\btwo\b)(?=.*\bthree\b)(?!.*\bfour\b)(?!.*\bfive\b)
  • ^将搜索 anchor 定在字符串的开头。
  • (?=...)确保其内容可以从当前位置匹配
  • (?!...)确保其内容无法与当前位置匹配
  • \bone\b匹配 one但不是 lonely .

  • 所以你得到:
    >>> import re
    >>> r = re.compile(r"^(?=.*\bone\b)(?=.*\btwo\b)(?=.*\bthree\b)(?!.*\bfour\b)(?!.*\bfive\b)")
    >>> for text in texts:
    ... if r.match(text):
    ... print(text)
    ...
    three two one
    one three two six

    关于regex - 仅当文本包含白名单中的所有单词,但不包含黑名单中的所有单词时才匹配文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011848/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com