Нахождение последнего вхождения _sre.SRE_Pattern в текстовом файле - PullRequest
0 голосов
/ 02 июля 2019

Я хочу найти последнее вхождение шаблона "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)

, но это не сработает, потому что то, что я ищу, не совсем строка.Мой текстовый файл довольно большой, как в гигабайтах, и мы будем благодарны за более эффективное решение.

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Вы можете использовать символ $, чтобы соответствовать концу строки ( 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']
0 голосов
/ 08 июля 2019

Я получил ответ.мы можем использовать модуль 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).

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...