我正在尝试使用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)
答案 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']