正则表达式 - 匹配直到一组多种可能性

Regex - match until a group of multiple possibilities

我有以下文字:
你可能有那个东西不你没有但也许有

我正在尝试编写一个可以匹配所有内容的正则表达式,直到它找到一些特定的单词,"NO""BUT" 在此示例中,如果字符串包含两个单词,则停在第一个:

你可能有那个东西没有你没有但是也许有
你可能有那个东西

你可能有你没有的东西但是也许有
你可能有你没有的东西

我正在尝试下面的正则表达式,但问题是它在 BUT 处停止,即使它有 NO:

(.*)(?:NO|BUT)

上述正则表达式的匹配示例,粗体为完整匹配,斜体为第 1 组:
你可能有你没有的东西但是也许有

我的期望:
你可能有那个东西没有你没有但是也许有

让我们修复您的正则表达式模式

^(.*?)\s*(?:NO|BUT)

现在我们可以将上面的 regex 模式与 search

一起使用
s = 'You may have that thing NO you dont BUT maybe yes'
match = re.search(r'^(.*?)\s*(?:NO|BUT)', s)

>>> match.group(1)
'You may have that thing'

正则表达式详细信息:

  • ^ : 在行首断言位置
  • (.*?) : 第一个捕获组
    • .*? :匹配任意字符零次或多次,但次数尽可能少
  • \s* : 零个或多个空白字符
  • (?:NO|BUT) : 非捕获组
    • NO|BUT :匹配NOBUT
    • 之一

在线查看regex demo