用正则表达式组的dict替换Python字符串模板?

2024-10-03 19:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

一般来说,我对python/programming还不熟悉,我尝试在go中基于prometheus的statsd代理构建一个statsd到opentsdb代理。 我正在尝试创建一个字符串模板,如下所示:

label_name = "${1}_${2}_${3}_${6}"

然后使用上面的label=string模板格式,将1、2、3和7的内容替换为重新匹配组另一根绳子。我以为我可以用绳子做这个Template.safe_替代还有一个小的for循环,可以将组转换成字典:

^{pr2}$

但我有麻烦,因为它看起来像字符串模板()正在查找与我的{1: "blue", 2: "green", 3: "red", 4: "yellow"}不匹配的[_a-z][_a-zA-Z0-9]。现在我完全迷路了,我觉得必须有一个干净的方法来做这件事,而不是我的花园小路。在

假设我有一个statsd指标,比如:

connstats_by.vip.nested._Common_Domain.89.44.250.117.conncount:40|g

以及一个正则表达式字符串,如so

re.compile('connstats_by\\.vip\\.nested\\.([^.]*)\\.([^.]*)\\.([^.]*)\\.([^.]*)\\.([^.]*)\\.([^\:]*)(?:\:)([^\|]*)(?:\|)([^\n]*)')

在上面的for循环之后给出了:

{ 1: "_Primary_Domain",
  2: "192",
  3: "168",
  4: "1",
  5: "117",
  6: "conncount",
  7: "40",
  8: "g" }

如果没有一个看起来很恶心的嵌套for循环,我似乎无法用dict的成员替换模板的成员。我觉得我走错了路。我希望这里有人能给我指出一个更像Python的方向,三个月后我就能理解。在

提前谢谢你的帮助。在


Tags: 字符串模板go代理forby成员statsd
1条回答
网友
1楼 · 发布于 2024-10-03 19:19:34

您的格式字符串需要一个位置列表,因此这应该有效:

label_name = "${1}_${2}_${3}_${6}"
metric = "connstats_by.vip.nested._Common_Domain.89.44.250.117.conncount:40|g"
rx = re.compile('connstats_by\\.vip\\.nested\\.([^.]*)\\.([^.]*)\\.([^.]*)\\.([^.]*)\\.([^.]*)\\.([^\:]*)(?:\:)([^\|]*)(?:\|)([^\n]*)')
print(label_name.format(*rx.match(metric).groups()))

哪个指纹

^{pr2}$

相关问题 更多 >