从list元素中获取值的最简洁方法

ILo*_*oon 4 python list

我有一个解析日志中的行列表,如下所示:

parsedLog = ['20151005 09:11:14 LOG_ID 00000000', '20151005 09:11:14 LOG_ADDR 0173acc4\n    Address of log', '20151005 09:11:14 READ_CONFIG 00000105',
Run Code Online (Sandbox Code Playgroud)

我正在寻找最简洁的方法0173acc4从字符串中的第二个元素中提取值LOG_ADDR(即键)(原因是日志不会始终保持一致).

我目前正在使用以下一个班轮:

filter(lambda line: 'LOG_ADDR' in line, parsedLog)[0].split('\n')[-8:]
Run Code Online (Sandbox Code Playgroud)

Avi*_*Raj 5

你可以使用正则表达式.

for line in parsedlog:
    if 'LOG_ADDR' in line:
        print re.search(r'\S+(?=\n)', line).group()
Run Code Online (Sandbox Code Playgroud)

\S+匹配一个或多个非空格字符.因此,\S+(?=\n)只有当后跟换行符时,才能匹配一个或多个非空格字符.前瞻是断言,它不会消耗任何单个字符,但会断言匹配是否可行.

要么

将printstmt 更改为,

print re.search(r'\bLOG_ADDR\s+(\S+)', line).group(1)
Run Code Online (Sandbox Code Playgroud)

要么

>>> for line in parsedLog:
    if 'LOG_ADDR' in line:
        s = line.split()
        for i,j in enumerate(s):
            if j == 'LOG_ADDR':
                print(s[i+1])


0173acc4
>>> 
Run Code Online (Sandbox Code Playgroud)

要么

>>> for line in parsedLog:
    if 'LOG_ADDR' in line:
        s = line.split()
        print s[s.index('LOG_ADDR')+1]


0173acc4
Run Code Online (Sandbox Code Playgroud)