尝试基于python中的重新匹配对括号中的数据进行全局化
我试图使用python根据匹配的文本从应用程序日志中获取数据节。伪示例如下所示:尝试基于python中的重新匹配对括号中的数据进行全局化,python,regex,Python,Regex,我试图使用python根据匹配的文本从应用程序日志中获取数据节。伪示例如下所示: Error_Paragraph = [ data1 = 'abcdefg' data2 = '123556' data3 = 'supercalifragilistic' data4 = 'expealadocious' .... data106 = 'critical info' .... ] 这些日志中有许多诗节。。。都带有“data106”类型标识符。
Error_Paragraph = [
data1 = 'abcdefg'
data2 = '123556'
data3 = 'supercalifragilistic'
data4 = 'expealadocious'
....
data106 = 'critical info'
....
]
这些日志中有许多诗节。。。都带有“data106”类型标识符。哪种最好的方法可以只抓住与“错误段落”匹配的段落?抓取整个段落会很有用,但我在“Error_段落”中只查找“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)
假设这些节不包含
[
括号]
,您可以搜索
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']
@Tim Pietzker-感谢您的回复。由于日志文件的当前大小,我正在从另一个文件中读取它们。我已经修改了我的尝试并将其粘贴到原始帖子中。。。删除您的建议:我的解决方案假设文件内容已被读入
s
。在使用正则表达式之前,您需要这样做,因为它们只处理字符串,而不处理文件。findall
被记录为返回组或tuple
s(其中tuple
s将包含多个组)的列表。输出看起来可能是某种错误。这就是确切的输出;没有别的了?什么是s
?您的代码使用它,但它没有在共享的代码中的任何地方定义。此外,文本是否可以包含方括号([]
)?输出看起来像是错误回溯的一部分。请发布完整的回溯。在搜索之前,你需要解压、提取和读取文件。