Как извлечь имя изображения с помощью регулярного выражения Python? - PullRequest
0 голосов
/ 27 февраля 2019

, поэтому я хочу извлечь имя изображения из пути, чтобы использовать его в качестве меток далее в задаче классификации.это вот что:

[PosixPath ('/ content / drive / My Drive / Logo / adidas10.jpg'),

PosixPath ('/ content / drive / My Drive / Logo /adidas11.jpg '),

PosixPath (' / content / drive / My Drive / Logo / adidas13.jpg '),

.,.] и это продолжается для 600 изображений.

, поэтому я хочу получить название бренда, как в данном случае adidas.

вот выражение RegEx, которое я использовал:

r’([\w\s.-]).[jpg]’

но что я получаю после проверки ярлыка с изображениями:

 print(data.classes)

 ['L']

какие-либо предложения?, Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Отличным ресурсом для проверки вашего регулярного выражения является Regex101 .

Вы пытаетесь сгруппировать файл, заканчивающийся вместе, используя квадратные скобки [], что создает выбор любого из трех символовj, p или g.Точка не экранирована и, следовательно, в синтаксисе регулярных выражений - это любой символ.Поскольку вы никогда не добавляете множители (например, + для 1 или более символов, * для 0 или более символов или ? для необязательного символа), вы соответствуете всего нескольким буквам.

Если вы хотите прочитать немного больше обо всех операторах регулярных выражений, модификаторах и подобных понятиях, Я рекомендую прочитать документацию модуля re Python .

Вы можете переписать регулярное выражение вчто-то вроде этого (извлеките первую группу для получения имени файла) или используйте тот факт, что в пакете os есть библиотека обработки пути:

^.*\/([^\/]+\.jpg).*$

Вы можете увидеть это регулярное выражениев действии здесь.

Так как у вас, кажется, уже есть доступные объекты пути, вы можете просто извлечь basename пути, который в вашем случае будет именем файла:

from os.path import basename
a = '/content/drive/My Drive/Logo/adidas10.jpg'
filename = basename(a)

filename теперь будет adidas10.jpg

0 голосов
/ 27 февраля 2019

Вы используете класс символов , который будет одним из перечисленных символов.Таким образом, ваш шаблон ([\w\s.-]).[jpg] будет захватывать группу, соответствующую одному из [\w\s.-], затем совпадать с любым символом, кроме новой строки из-за точки ., а затем совпадать с одним из [jpg].

.пример данных, который даст вам группу захвата для L и совпадение для og, а также группу захвата для 0, 1, 3 и совпадение для .j

Если вы хотите получить название бренда, например adidas , из ваших примеров, как вы указали в своем вопросе, вы можете использовать группу захвата.

/([^/]*[^/\d])\d*\.jpg

Regex demo | Python demo

Это будет соответствовать

  • / Совпадение буквально
  • ( Группа захвата (будет содержать название бренда)
    • [^/]* Совпадение не / 0+ раз, а не / с использованием отрицательных классов символов
    • [^/\d] Совпадение не / илицифра
  • ) Закрыть группу
  • \d* Совпадение 0+ раз цифра
  • \.jpg Совпадение .jpg
0 голосов
/ 27 февраля 2019

([\w\s.-]) (любой из [A-Za-z0-9_], пробелы, литерал ., литерал -) захватывает L в Logo, потому что это:

  • .: любой отдельный символ;o в данном случае
  • [jpg]: любой из j, p, g;g здесь

Вам необходимо:

/([^/]+)\.jpg$

Теперь единственная захваченная группа будет содержать имя изображения.

  • / соответствует буквальному/
  • ([^/]+) соответствует одному или нескольким символам, которые не / - имя файла
  • \.jpg соответствует .jpg в конце ($)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...