如何用Python正则表达式提取图片路径中的品牌名称?
看起来你的正则表达式写得有点问题,导致只抓到了单个字符“L”,我来帮你修正一下!
问题出在哪?
先拆解你用的正则 r’([\w\s.-]).[jpg]’:
([\w\s.-])这个分组只匹配单个字符(因为没加+或*这类量词表示匹配多次),所以只能捕获一个字符;.[jpg]这里的.是正则元字符,会匹配任意单个字符;[jpg]是字符集,只匹配j/p/g中的一个;- 整个正则会在路径里找第一个符合「单个字符 + 任意字符 + j/p/g」的片段,结果刚好抓到了路径里
Logo中的L,所以才输出['L']。
另外,要匹配实际的.jpg扩展名,得把.转义成\.,不然它会匹配任意字符。
正确的解决方法
方法1:利用Path对象的属性简化处理
Python的PosixPath自带提取文件名的方法,先拿到不带扩展名的文件名,再提取前面的品牌名(假设品牌名都是纯字母,后面跟数字):
import re from pathlib import Path # 你的600个路径列表 image_paths = [Path('/content/drive/My Drive/Logo/adidas10.jpg'), Path('/content/drive/My Drive/Logo/adidas11.jpg'), # ... 其他路径 ] brands = [] for path in image_paths: # 提取不带扩展名的文件名,比如'adidas10' filename_stem = path.stem # 匹配开头的纯字母部分(品牌名) match_result = re.match(r'^([A-Za-z]+)', filename_stem) if match_result: brands.append(match_result.group(1)) # 去重得到最终分类标签 unique_brand_labels = list(set(brands)) print(unique_brand_labels)
方法2:直接对路径字符串用精准正则匹配
如果想直接处理路径字符串,可以写一个匹配最后一个目录分隔符后、数字和.jpg之前品牌名的正则:
import re from pathlib import Path image_paths = [Path('/content/drive/My Drive/Logo/adidas10.jpg'), Path('/content/drive/My Drive/Logo/adidas11.jpg'), # ... 其他路径 ] # 正则解释:匹配最后一个/后,纯字母品牌名 + 数字 + .jpg结尾 pattern = r'/([A-Za-z]+)\d+\.jpg$' brands = [] for path in image_paths: match_result = re.search(pattern, str(path)) if match_result: brands.append(match_result.group(1)) unique_brand_labels = list(set(brands)) print(unique_brand_labels)
这两种方法都能准确提取出adidas这类品牌名,作为你的分类任务标签~
内容的提问来源于stack exchange,提问作者Dimi
相关产品推荐
相关产品推荐

