使用re.finditer(或其他函数)来查找str并解析python中的以下数据

时间:2017-02-01 11:52:02

标签: python regex

我试图在Python 3.4中构建我的第一个程序,旨在从Windows XP中的setupapi.dev.log文件中解析出有法律感兴趣的数据(基于文本的日志文件存储它的数据)在ASCII)。

我目前正在使用re.finditer来识别" VID"的位置。但需要指定我感兴趣的以下5个字符。

到目前为止,我的代码看起来像这样:

import sys 
import re

file_path = sys.argv[1]
file_pointer = open(file_path)
data = (file_pointer.read()

find_vid="VID"
v = re.finditer(find_vid, data)
for each in v:
  print('%02d-%02d: %s' % (each.start(), each.end(), each.group()))

结果:

188275-188278: VID
188785-188788: VID
...

有没有办法使用这个函数,以便我可以解析文本文件中VID后面的文本?

1 个答案:

答案 0 :(得分:1)

为了在模式后获得5个字符,您可以将re.findall与一个组一起使用:

>>> s = '123VID foo 456VID bar '
>>> re.findall('VID(.{5})', s)
[' foo ', ' bar ']

来自docs

  

如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。

如果你想坚持finditer,语法会稍微复杂一些,因为你必须手动提取组:

>>> [m.group(1) for m in re.finditer('VID(.{5})', s)]
[' foo ', ' bar ']
相关问题