#regex #python-3.x
#регулярное выражение #python-3.x
Вопрос:
Я работаю с файлами в tar.gz файл, содержащий текстовые файлы, и попытка извлечь имя файла связанного TarInfo
объекта, свойство member.name
которого выглядит следующим образом:
aclImdb/test/neg/1026_2.txt
aclImdb/test/neg/1027_5.txt
...
aclImdb/test/neg/1030_4.txt
Я написал следующий код, который выводит строку test/neg/1268_2
regex = '/((?:[^/]*/).*?).'
with tarfile.open("C:\Users\Orestis\Desktop\aclImdb_v1.tar.gz") as archive:
for member in archive.getmembers():
if member.isreg():
m = re.findall(regex, member.name)
print(m)
Как я должен изменить регулярное выражение, чтобы извлечь только 1268_2
часть имен файлов? Фактически я хочу извлечь строку после 3-го вхождения "/"
и до 1-го вхождения "."
.
Комментарии:
1.
d _d (?=.w $)
илиw (?=.w $)
подойдет.2. Вероятно, вы могли бы даже сделать это без регулярного выражения, выполнив что-то вроде
str_list = in.split('/')[3]
and thenout = ''.join(str_list)
(это захватит ВСЕ после третьего «/»).
Ответ №1:
Вы могли бы жестко запрограммировать это:
.*?/.*?/.*?/(.*?).
Более элегантным является что-то вроде этого:
(.*?/){3}(.*?).
Вы можете просто изменить 3 в соответствии с вашим шаблоном. (Обратите внимание, что нужная вам группа равна 2 долларам)