Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用正则表达式组的dict替换Python字符串模板?_Python_Regex_Substitution - Fatal编程技术网

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

用正则表达式组的dict替换Python字符串模板?,python,regex,substitution,Python,Regex,Substitution,一般来说,我对python/编程不太熟悉,并且试图基于prometheus在go中的statsd代理构建一个statsd到opentsdb的代理。 我正在尝试使用如下所示的字符串模板: label_name = "${1}_${2}_${3}_${6}" 然后使用上述label=string模板格式,将1、2、3和7的内容替换为不同字符串的re.match.groups。我想我可以用strings Template.safe_substitute和一个小for循环将组转换成字典: .

一般来说,我对python/编程不太熟悉,并且试图基于prometheus在go中的statsd代理构建一个statsd到opentsdb的代理。 我正在尝试使用如下所示的字符串模板:

label_name = "${1}_${2}_${3}_${6}"
然后使用上述label=string模板格式,将1、2、3和7的内容替换为不同字符串的re.match.groups。我想我可以用strings Template.safe_substitute和一个小for循环将组转换成字典:

     ...:         label_match_dict = {}
     ...:         for i in range(len(input_match.groups())):
     ...:             label_match_dict[str(i+1)] = input_match.groups()[i]
然而,我遇到了麻烦,因为它看起来像string.Template()正在查找
[\u a-z][\u a-zA-Z0-9]
,这与我的
{1:“蓝色”,2:“绿色”,3:“红色”,4:“黄色”}
不匹配。现在我完全迷路了,觉得必须有一个干净的方法来做这件事,而不是我的花园小径

假设我有一个statsd度量,比如:

connstats_by.vip.nested._Common_Domain.89.44.250.117.conncount:40|g
和一个正则表达式字符串,如:

在上面的for循环之后,我得到:

{ 1: "_Primary_Domain",
  2: "192",
  3: "168",
  4: "1",
  5: "117",
  6: "conncount",
  7: "40",
  8: "g" }
如果没有一个看起来很恶心的嵌套for循环,我就无法用dict的成员替换模板的成员。我觉得我走错了路。我希望这里有人能给我指出一个更具python风格的方向,让我在接下来的三个月里理解它


提前感谢您的帮助

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

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()))
哪张照片

$89_$44_$250_$40

你到底有什么问题哦,快点!非常感谢,这比我做3个正则表达式替换要简单得多。现在我只需要去掉美元符号,它什么都不是。非常感谢你!
$89_$44_$250_$40