[英]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_]
任何空格,文字.
,文字-
)正在捕获Logo
的L
,因为它遵循以下条件:
.
:任何单个字符; o
在这种情况下, [jpg]
: j
, p
, g
任何一个; g
这里 你需要:
/([^/]+)\.jpg$
现在,唯一捕获的组将包含图像名称。
/
匹配文字/
([^/]+)
匹配一个或多个非/
字符-文件名 \\.jpg
匹配末尾的.jpg
( $
) Regex101是一个很好的尝试使用正则表达式的资源。
您尝试使用方括号[]
将文件结尾在一起,以创建三个字符j
, p
或g
的任意一个的选择。 该点不会转义,因此-在正则表达式语法中-是任何字符。 由于您从不添加任何乘数(例如+
表示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
以及捕获组为0
, 1
, 3
和匹配.j
如果您想在问题中陈述自己的例子,从而获得adidas之类的品牌名称,则可以使用一个捕获组。
/([^/]*[^/\d])\d*\.jpg
那将匹配
/
从字面上匹配 (
捕获组(将包含品牌名称)
[^/]*
匹配不是/
0+倍不是/
使用否定字符类 [^/\\d]
不匹配/
或数字 )
封闭小组 \\d*
匹配数字0+次 \\.jpg
匹配.jpg
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.