使用数组切片时出现问题

时间:2016-12-13 16:30:30

标签: python

我是一名中级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=参数的值吗?

非常感谢:)

2 个答案:

答案 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)简单的切片对你没有帮助,因为你需要知道活动值的长度,总的来说它不是这项任务的最佳工具。