在文本文件中查找_sre.SRE_Pattern的最后一次出现

时间:2019-07-02 09:10:51

标签: python text

我想搜索模式“ frame(某些可变数字)())”的最后一次出现,例如 frame1(),frame2(),frame3() ....(不完全是一个字符串)。我对获取可变数字感兴趣,该数字将随着每次发生而不断增加。

我通过使用此代码并获得正确答案来做到这一点,但我想要更有效的解决方案。

regex = re.compile('frame*[0-9]*\(\)') NoOfFrames = len(regex.findall(textfile))

但是我认为找到它的方法可能比列出所有事件然后进行计数要更有效。就像如果我们可以从文本文件的最后一行开始,那么第一次出现就是答案。我也尝试过使用

m = mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) i = m.rfind(regex) # search for last occurrence of 'word' print(i) m.seek(i) # seek to the location line = m.readline() # read to the end of the line print(line)

但是这将无法正常工作,因为我正在搜索的内容不完全是字符串。我的文本文件很大,例如千兆字节(GB),更有效的解决方案将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用$符号来匹配字符串(regex101)的结尾:

data = '''frame1() text
frame2() text text
text frame3()
another text'''

import re

print(re.findall(r'.*frame([0-9]+)\(\).*?$', data, flags=re.DOTALL))

打印:

['3']

答案 1 :(得分:0)

我得到了答案。我们可以使用 regex 模块,该模块具有向后搜索模式的方法。

with open('a.txt', 'r') as file: textfile = file.read() output = regex.search(r"(?r)frame*[0-9]*\(\)", textfile) print(output.group(0))

这将发现从后向最早出现 frame * [0-9] *()的情况,输出将为_regex.Match格式。要将其转换为字符串,我们可以使用output.group(0)。

谢谢!