我是一名中级Python程序员。在我的实验中,我使用Linux命令输出一些类似的结果:
OFPST_TABLE reply (xid=0x2):
table 0 ("classifier"):
active=1, lookup=41, matched=4
max_entries=1000000
matching:
in_port: exact match or wildcard
eth_src: exact match or wildcard
eth_dst: exact match or wildcard
eth_type: exact match or wildcard
vlan_vid: exact match or wildcard
vlan_pcp: exact match or wildcard
ip_src: exact match or wildcard
ip_dst: exact match or wildcard
nw_proto: exact match or wildcard
nw_tos: exact match or wildcard
tcp_src: exact match or wildcard
tcp_dst: exact match or wildcard
我的目标是收集参数active=
的值,该参数值不时变化(在这种情况下它只是1)。我使用以下切片,但它不起作用:
string = sw.cmd('ovs-ofctl dump-tables ' + sw.name) # trigger the sh command
count = count + int(string[string.rfind("=") + 1:])
我认为我在这里使用切片错误,但我尝试了很多方法,但我仍然没有得到任何结果。有人可以帮我从这个字符串中提取active=
参数的值吗?
非常感谢:)
答案 0 :(得分:2)
regex怎么样?
import re
count += int(re.search(r'active\s*=\s*([^,])\s*,', string).group(1))
答案 1 :(得分:2)
1)使用正则表达式:
import re
m = re.search('active=(\d+)', ' active=1, lookup=41, matched=4')
print m.group(1)
2)str.rfind
在找到子字符串的字符串中返回最高索引,它会找到最右边的=
(matched=4
),即不是你想要的。
3)简单的切片对你没有帮助,因为你需要知道活动值的长度,总的来说它不是这项任务的最佳工具。