如何排除正则表达式匹配后的最后一个词?

How to exclude the last word after the regex match?

这不是 python 或 java 编程的一部分,而是 grok 模式的一部分。我有以下格式的传入数据

  1. online market failure ACC20ZM::Test::BNC099
  2. online market failure;Test;BNC099

我需要提取数据,直到第一次出现特殊字符 ;:,不包括字符本身。 预期输出是 online market failure 我能够使用 ^([^:|;])+ 获得第二种格式,但第一种格式将按预期 return online market failure ACC20ZM 并且我试图在其中排除 ACC20ZM。

注意:字段中的消息不固定,它一直在变化(包括我要排除的词),所以没有固定的词数。此外,它是一个以上述格式获取数据的字段(第一种类型或第二种类型,但一次不能同时使用这两种类型)。我正在尝试编写一个应该能够处理这两种格式的正则表达式模式。我特别在寻求帮助,以使用提到的正则表达式模式排除匹配后的单词。

你可以试试这个;

^([^:|;])+(?=(\s\w*:|;))