#python #regex
Вопрос:
Я нашел несколько похожих вопросов о регулярных выражениях, но я стараюсь превратить эти ответы в то, что я пытаюсь сделать. У меня есть такая строка:
Y:Pathsub pathname_of_folder.microphones.flac24trackname01.flac
Я хочу вернуть «flac24».
Количество периодов в папке name_of_folder будет разным. Я понял, как изолировать текст между двумя последними косыми чертами, но, похоже, теперь я не могу получить часть после последнего периода:
(?<=\)[^\]*(?=\[^\]*$)
Спасибо!
Комментарии:
1. Является ли цель всегда папкой файла?
2. Да, это всегда будет родительская папка файла.
Ответ №1:
Для регулярного выражения я бы сделал:
.([^.\] )\[^\] $
Поскольку вы отметили этот Python, вы также можете подумать о том, чтобы просто использовать Pathlib
from pathlib import PureWindowsPath
p=PureWindowsPath(r'Y:Pathsub pathname_of_folder.microphones.flac24trackname01.flac')
>>> p.parts[-2].split('.')[-1]
flac24
Комментарии:
1. Это сработает! Спасибо за быструю помощь. Я пытаюсь поместить все это в одну строку, потому что на самом деле я передаю регулярное выражение в скрипт python в качестве переменной, поэтому я использую eval() для его выполнения. Однако Pathlib выглядит интересно. Я не знаком с этим, но проверю это в будущем.
2. На самом деле я передаю регулярное выражение в скрипт python в качестве переменной, поэтому для его выполнения я использую eval (). Осторожно
eval
! Существует множество других способов передачи регулярного выражения в качестве переменной. Это просто строки, поэтому вы можете легко передать их как строку.3. Что бы вы тогда посоветовали вместо этого? Я пытаюсь сделать свой скрипт python достаточно универсальным, чтобы я мог создавать различные команды синтаксического анализа в файле конфигурации, а затем использовать eval() — по крайней мере, я думал, что это имеет смысл: например, у меня есть это
"Date": "=re.search(r'\d{4}-\d{}-\d{2}',file).group()"
в файле JSON, а затем я делаю это:if settings["tags"][key][0:1] == '=': value = eval(settings["tags"][key][1:])
4. Зависит от того, предназначен ли сценарий для вашего собственного использования или «в дикой природе». Если вы хотите обеспечить безопасность, вы можете сделать
"DateRE": "\d{4}-\d{}-\d{2}"
это внутри файла конфигурации; обнаружьте этот ключ в JSON, а затем просто используйте строку внутри регулярного выражения в своем сценарии, если она присутствует, или по умолчанию, если нет.
Ответ №2:
Вы можете использовать
\[^\]*.([^\]*)\[^\]*$
Смотрите демонстрацию регулярных выражений. Подробные сведения:
\
— а[^\]*
— ноль или более символов, отличных от.
— а.
чар([^\]*)
— Группа 1: ноль или более символов, отличных от\
— а[^\]*
— ноль или более символов, отличных от$
— конец веревки.
Смотрите демонстрационную версию Python:
import re
regex = r"\[^\]*.([^\]*)\[^\]*$"
x = "Y:\Path\sub path\name_of_folder.microphones.flac24\trackname01.flac"
match = re.search(regex, x)
if match:
print(match.group(1))