Python中对大文件执行多行正则表达式搜索的最快方法是什么
我通常看到:
for line in file
。这不适用于多行正则表达式text = file.read()
。这不会扩展到非常大的文件我正在寻找某种方法将数据从文件直接流式传输到已编译的正则表达式
确切用例: 我试图在saif文件中找到所有TC值和信号的名称(仅最后一个级别可以,不需要完整的层次名称)。例如,我正在寻找的模式是
(signalname\[14\]
(T0 5519100) (T1 12540900) (TX 0)
(TC 5) (IG 0)
)
据我所知,空格可以与任何空格互换。
该模式包含在其他块中,我不再关心这些。
我特别关心TC值和名称(带有可选索引)。
似乎与pcregrep -M
一起工作的正则表达式是\(\s*([0-9a-zA-Z_]*(?:\\\[[0-9]+\\\])?)\s*\(\s*T0\s*[0-9]+\s*\)\s*\(\s*T1\s*[0-9]+\s*\)\s*\(\s*TX\s*[0-9]+\s*\)\s*\(\s*TC\s*([0-9]+)\s*\)\s*\(\s*IG\s*[0-9]+\s*\)\s*\)
。看看pcregrep
的内存使用情况,它似乎是以流方式运行的,因此可以做我想要的事情。我正在寻找一种python方法来实现这一点
您可以将每一行连接成一个“buffer”字符串,并在正则表达式匹配时将其清除
例:
字符串连接可能很慢,尤其是对于大字符串,请参见:https://waymoot.org/home/python_string/
相关问题 更多 >
编程相关推荐