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

时间:2019-02-27 14:57:02

标签: python regex

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

[PosixPath('/ content / drive /我的云端硬盘/徽标/adidas10.jpg')

PosixPath('/ content / drive /我的云端硬盘/徽标/adidas11.jpg'),

PosixPath('/ content / drive /我的云端硬盘/徽标/adidas13.jpg')

。   。   。]并可以显示600张图像。

所以我想要得到的是品牌名称,例如adidas。

这是我使用的RegEx表达式:

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

但是,检查图像标签后得到的是:

 print(data.classes)

 ['L']

有什么建议吗? , 谢谢。

3 个答案:

答案 0 :(得分:3)

([\w\s.-])[A-Za-z0-9_],空格,文字.,文字-中的任何一个)正在捕获L中的Logo,因为它遵循:

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

您需要:

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

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

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

答案 1 :(得分:2)

Regex101是试用正则表达式的绝佳资源。

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

如果您想进一步了解所有正则表达式运算符,修饰符和类似概念,请I recommend reading the documentation of python's re module

您可以将正则表达式重写为这样的内容(提取第一组以检索文件名),也可以使用^.*\/([^\/]+\.jpg).*$ 包中存在路径处理库这一事实:

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

You can see this regex in action here.

由于您似乎已经拥有路径对象,因此可以提取路径的basename,在您的情况下将是文件名:

filename

adidas10.jpg现在将是{{1}}

答案 2 :(得分:1)

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

对于您的示例数据,这将为您提供L的捕获组和og的匹配项,以及01,{的捕获组{1}}和匹配项3

如果您要在问题中声明的示例中获得诸如 adidas 之类的品牌名称,则可以使用一个捕获组。

.j

Regex demo | Python demo

这将匹配

  • /([^/]*[^/\d])\d*\.jpg 字面上匹配
  • /捕获组(将包含品牌名称)
    • (使用否定的character classes
    • 不匹配[^/]* 0+次不匹配/
    • /不匹配[^/\d]或数字
  • /关闭群组
  • )匹配数字0+次
  • \d*匹配.jpg