我正在尝试扫描以下类型的文件。文件存在以串行方式交替的特定块,例如:
**Block A starts**
-some data- **Block B starts**
-some data- ***END***---- **Block A starts**
-some data- **Block B starts**
-some data- ***END***---- etc etc.
此文件可能非常大(例如500gb)。 我正在尝试使用正则表达式扫描文件以获取每个块的数据,例如:
[[块A数据,块B数据],[块A数据,块B数据]]
我在开始尝试这样做的方式是使用这个正则表达式:
"Block A starts(.+?)Block B starts(.+?)END"
如果文件采用这种格式,一切正常,但是如果例如Block B没有出现在日志文件中,则此正则表达式会出现问题。我想我有回溯问题。我读到你必须使用原子组去除回溯,所以我写了这个正则表达式:
"(?=(?P<group1>.+?Block B starts))(?P=group1)(?=(?P<group2>.+?END))(?P=group2)"
但仍有同样的问题。我也试过这个正则表达式,以便在它到达文件末尾时停止,但仍然没有成功。
"(?=(?P<group1>.+?(?:Block B starts|\Z)))(?P=group1)(?=(?P<group2>.+?(?:END|\Z)))(?P=group2)"
如果正则表达式与文件不匹配,则需要永久完成大文件。
任何人都知道如何修复正则表达式,以便正确匹配文件,但如果任何这些块不存在,也会使其快速失败。
(我正在使用带有默认re模块的python)