我正在使用正则表达式编写python代码以匹配一组行与一行。 我想将变量传递给我的正则表达式。
下面是我提出的正则表达式模式,我将我的变量替换为我需要匹配的位置 但它没有匹配。但是,当我直接使用字符串代替变量时,正则表达式正常工作。
vm_name = my_vm-84
pattern = r'(vm\.cpu\.num_cores{.+name=)%s(.+}) (\d+)' %vm_name
res = re.search(pattern, metric_data)
此处metric_data是以下行的字符串:
vm.cpu.num_cores{cluster="Cluster",cluster_status="active",id="44242543-0000-4481-b494-164fd257d190",name="my_vm-84",unit="cores",workspace_id="0f2a0e8751554e92abcb35b82f2415b2"} 1
vm.cpu.num_cores{cluster="Cluster",cluster_status="active",id="50084393-8b48-ac4d-013c-2c29a114565a",name="VM-Do-not-Delete",unit="cores",workspace_id=""} 2
vm.cpu.num_cores{cluster="Cluster",cluster_status="active",id="5008842e-a4dd-1167-fc78-c3b2ec467f66",name="windows clone",unit="cores",workspace_id=""} 8
vm.cpu.num_cores{cluster="Cluster",cluster_status="active",id="5008b125-dddf-d3b0-e2c3-13a64e32511a",name="Ubuntu_new",unit="cores",workspace_id="0f2a0e8751554e92abcb35b82f2415b2"} 1
vm.cpu.num_cores{cluster="Cluster",cluster_status="active",id="9818eaf3-382f-4a64-ac7a-89cbc5c36262",name="Ubuntu-cloud-init",unit="cores",workspace_id="0f2a0e8751554e92abcb35b82f2415b2"} 1
赞赏建立我的正则表达式的任何帮助
答案 0 :(得分:2)
只需更改您的变量:
vm_name = '"my_vm-84"'
Trick在引号字符中。
答案 1 :(得分:1)
这应该有效:
vm_name = 'my_vm-84'
pattern = r'vm\.cpu\.num_cores{.+name="%s".+} (\d+)' %vm_name
res = re.search(pattern, metric_data)
请注意,您的示例数据在变量值"my_vm-84"
答案 2 :(得分:1)
输入文本的第一列是json,你应该把它解析为json;那说,你错过了正则表达式中的双引号:
pattern = r"(vm\.cpu\.num_cores{.+name=)\"my_vm-84\"(.+}) (\d+)"