尝试根据python中的RE匹配括号中的数据

时间:2013-08-01 21:42:56

标签: python regex

我正在尝试使用python根据匹配的文本从应用程序日志中获取数据的节。一个伪示例看起来像这样:

Error_Paragraph = [
    data1 = 'abcdefg'
    data2 = '123556'
    data3 = 'supercalifragilistic'
    data4 = 'expealadocious'
    ....
    data106 = 'critical info'
    ....
]

这些日志中有许多节...都带有“data106”类型标识符。只获取匹配“Error_Paragraph”的节的最佳方法是什么?抓住整个段落会很有用,但我只是在“Error_Paragraph”中专门寻找“data106”

我已经尝试了几次迭代,但似乎无法正确地删除段落。什么是真的很好将把这一切都吸收到字典中,以便我可以根据需要访问这些项目。

谢谢!

当前尝试的示例:

import re
import gzip
import sys

f = gzip.open( sys.argv[1], 'rb')

dataDict = re.findall(r"Error_Paragraph = \[[^\]]*data106 = '([^']*)'", s)

print dataDict

我得到以下输出:

File "./logfile.txt", line 10
dataDict = re.findall(f"^\$Error_Paragraph = \[[^\]]*data106 = '([^']*)'", s)

1 个答案:

答案 0 :(得分:1)

假设这些节不包含[括号],您可以搜索

Error_Paragraph = \[[^\]]*data106 = '([^']*)'

然后查看匹配的.groups(1)re.findall()会自动为您执行此操作:

>>> import re
>>> s = """Some_Paragraph = [
...     data1 = 'abcdefg'
...     data106 = 'uninteresting info'
... ]
...
... Error_Paragraph = [
...     data3 = 'supercalifragilistic'
...     data106 = 'critical info'
... ]
...
... Other_Paragraph = [
...     data4 = 'expealadocious'
...     data106 = 'boring info'
... ]"""
>>> re.findall(r"Error_Paragraph = \[[^\]]*data106 = '([^']*)'", s)
['critical info']