仅使用正则表达式拆分和反转字符串

时间:2018-06-27 23:06:32

标签: python graphite graphite-carbon

首先:是的,我知道尝试仅使用正则表达式来完成此操作是愚蠢的,但是我需要在Carbon Rewrite Rules(实际上是Python正则表达式)的上下文中进行此操作,例如:

^collectd\.([a-z0-9]+)\. = \1.system.

我正在尝试将监视系统从基于Nagios的系统迁移到基于Collected的系统。但是,collected的write_graphite插件经过硬编码以生成名为$prefix.host_example_com.$metric的指标,而我们现有的指标则存储为$prefix.com.example.host.$metric

注意:主机名没有固定数量的节,它们可能是bar.foobaz.bar.foobif.baz.bar.foo等。

因此,基本上可以归结为在一次re.sub()调用中完成此操作。

到目前为止,我已经得到:

metric  = 'collectd.foo_bar_baz.some.metric'
pattern = r'^collectd\.(?:([^_.]+)_?)+(.*)$'
print re.sub(pattern, metric, r'\1 \2')

哪个输出为:baz .some.metric,但我什至无法让它重复捕获组,让我们首先了解一下如何反向并加入任意数量的反向引用。

在单个re.sub()调用中是否有可能实现这种目的,还是我应该让自己陷入命运如此糟糕的命名/组织指标以及充满通配符的查询中?

0 个答案:

没有答案