python通过正则表达式遍历列表

时间:2017-05-08 18:01:32

标签: python regex python-2.7 for-loop

我正在尝试使用for循环迭代列表,并通过正则表达式捕获组构建第二个列表。我查看了与re模块相关的文档但由于某种原因,正则表达式总是返回一个结果。正则表达式已经过测试,所以我确信它是有效的。

有什么想法吗?

被修改

#! /usr/bin/python
import re
import subprocess
try:
    cmd = "ps aux|grep -i \'zabbi[x]\'"
    cmd_stdout = subprocess.check_output(cmd, shell=True).split('\n')
    cmd_stdout_lst = []
    ps_re = re.compile(r'^(\S+)\s+(\d+)\s+\d+\.\d+\s+\d+\.\d+\s+(\d+)\s+(\d+).+')
    for line in cmd_stdout:
        match = ps_re.findall(line)
        if match:
            print match
        cmd_stdout_lst.append('\n\t\t{"{#USER}":'+'"' + match[0][0] + ',"{#PID}":'+'"'+match[0][1]+'"}'+',"{#PID}":'+'"'+match    [0][2]+'"}'+',"{#PID}":'+'"'+match[0][3]+'"}')
    print '{\n\t"data":['+','.join(cmd_stdout_lst)+']\n}'
except:
    raise

$ python proc_discovery.py
[('zabbix', '14479', '96784', '680')]

1 个答案:

答案 0 :(得分:1)

我认为这有两个问题:

  1. 您的grep正则表达式与zabbix只会匹配相同的内容。为什么额外[ ]
  2. 您的程序在循环中的第一个print之后崩溃。您没有注意到,因为您捕获并忽略了异常。移除try - except以获取更有用的错误消息。
  3. 具体而言,问题2是re.findall()返回listtuple。外部list在您的情况下只有一个元素,内部tuple有四个。当您尝试为第二个print语句构建字符串时,实际上是将整个元组连接到前缀字符串,这会导致异常。使用match[0][0]代替match[0]依此类推,以解决此问题。