正则表达式匹配字符串的第一部分直到第一次出现空格字符,如果它不包含序列 ;host=

问题描述

我有这个字符串 cpu.usage_system;cpu=cpu-total;host=host1 6.94024205748818 1626401140(具有标签支持的石墨度量消息)。

我正在尝试匹配字符串的第一部分,直到第一次出现空格字符...但前提是字符串的第一部分不包含 ;host=

我可以用 ^([\S]+) 匹配直到第一次出现空格的所有字符。 我觉得我应该使用否定前瞻来检查 ;host= 的缺失,但我不知道如何将它们放在一起。

这个想法是匹配度量标签的第一部分(&标签),看看是否包含一个主机标签,如果它确实包含一个主机标签......不管它。如果它不包含主机标记,则附加一个

解决方法

这可能不是最优雅的解决方案,这取决于您还需要正则表达式做什么,但如果您只想排除包含 ;host= 的匹配行,则此先行应该有效:

^(?!.*;host=)([\S]+)