首页 > 解决方案 > 如何从大文本文件中的随机位置进行 python 正则表达式搜索

问题描述

我是python的新手,但精通正则表达式并熟悉编程概念。我试图在描述集合层次结构的大型文本文件 (.rdf) 中查找并响应一组模式。有一个根集合“collection_2”,它可能包含一个或多个项目,以及一个或多个子集合。等等...

parent collection_2
item_17
child collection_44
item_8
item_251
child collection_10
item_3
item_26
...
parent collection_44
item_19
child collection_5
child collection_21
item_106
item_63
...

请注意,collection_44 是 collection_2 的子项,它是具有自己的项目和子集合的父项,每个子项也是父项。我正在尝试将这些集合和项目组合成一个新文件中的真正层次结构。

到目前为止,我的代码很简陋,主要是打印语句来测试我的工作:

import re

rdf_filename = "MyRDF.rdf"
cur_parent = "collection_2"

with open(rdf_filename, "rt", encoding="utf-8") as rdf:
    print("Searching for \"" + cur_parent + "\" in " + rdf_filename)
    if re.search(cur_parent, rdf.read(), re.S):
        print("Found \"" + cur_parent + "\" at index  +, str(rdf.tell()))
        nextindex = str(rdf.tell() + len(cur_parent))
        print("Next search starts at " + nextindex)

找到collection_2后,需要递归处理collection_44及其子collection,然后递归处理collection_10等。

请注意,每个相关行还包含我需要使用的其他数据,因此是正则表达式(最终)。

如果我可以从指定的流位置/索引开始使用 re.search(),我想我可以弄清楚其余的,但我不知道如何在文件中间进行模式搜索。如果可能,我想避免阅读和搜索每一行,因为不相关的行(20k)比这个文件中的命中要多得多。

有任何想法吗?提前致谢。

标签: pythonpython-3.x

解决方案


推荐阅读