繁体   English   中英

如何使用python regexp提取图像名称?

[英]How to extract image name using python regexp?

所以我想从路径中提取图像名称,以便在分类任务中进一步将它们用作标签。 这是面食:

[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']

有什么建议么 ? , 谢谢。

([\\w\\s.-])[A-Za-z0-9_]任何空格,文字. ,文字- )正在捕获LogoL ,因为它遵循以下条件:

  • . :任何单个字符; o在这种情况下,
  • [jpg]jpg任何一个; g这里

你需要:

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

现在,唯一捕获的组将包含图像名称。

  • /匹配文字/
  • ([^/]+)匹配一个或多个非/字符-文件名
  • \\.jpg匹配末尾的.jpg$

Regex101是一个很好的尝试使用正则表达式的资源。

您尝试使用方括号[]将文件结尾在一起,以创建三个字符jpg的任意一个的选择。 该点不会转义,因此-在正则表达式语法中-是任何字符。 由于您从不添加任何乘数(例如+表示1个或多个字符, *表示0个或多个字符,或?表示可选字符),因此总共只匹配几个字母。

如果您想更多地了解所有正则表达式运算符,修饰符和类似概念, 建议阅读python的re模块文档

您可以将正则表达式重写为如下形式(提取第一组以检索文件名),或者使用os包中存在路径处理库这一事实:

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

您可以在此处查看此正则表达式的实际操作。

由于您似乎已经有了可用的路径对象,因此您可以提取路径的基本名称 ,在您的情况下,将使用文件名:

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

filename现在为adidas10.jpg

您使用一个字符类 ,它将列出其中一个字符。 因此,您的模式([\\w\\s.-]).[jpg]将捕获到与[\\w\\s.-]之一匹配的组中,然后匹配匹配除点换行符以外的任何字符. 然后匹配[jpg]

为了您的数据。例如,这会给你一个捕获组L和匹配og以及捕获组为013和匹配.j

如果您想在问题中陈述自己的例子,从而获得adidas之类的品牌名称,则可以使用一个捕获组。

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

正则表达式演示 | Python演示

那将匹配

  • /从字面上匹配
  • (捕获组(将包含品牌名称)
    • [^/]*匹配不是/ 0+倍不是/使用否定字符类
    • [^/\\d]不匹配/或数字
  • )封闭小组
  • \\d*匹配数字0+次
  • \\.jpg匹配.jpg

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM