donc je veux extraire le nom des images du chemin, pour les utiliser comme étiquettes plus loin dans une tâche de classification. c'est le pasth:
[PosixPath ('/ content / drive / My Drive / Logo / adidas10.jpg'),
PosixPath ('/ content / drive / My Drive / Logo / adidas11. jpg '),
PosixPath (' / content / drive / My Drive / Logo / adidas13.jpg '),
. . .] et ça continue pour 600 images.
donc je veux obtenir le nom de la marque, comme dans ce cas adidas.
voici l'expression RegEx que j'ai utilisée: p>
print(data.classes) ['L']
mais, ce que j'obtiens après avoir vérifié l'étiquette des images, c'est ceci:
râ([\w\s.-]).[jpg]â
des suggestions? , Merci.
3 Réponses :
Vous avez besoin de: Le seul groupe capturé contiendra le nom de l'image. ([\ w \ s.-]) (l'un des [A-Za-z0-9_] , espaces, littéral . code >, littéral - ) capture le L dans Logo car il suit:
. : n'importe quel caractère unique; o dans ce cas [jpg] : l'un des j , p , g ; g ici /([^/]+)\.jpg$
/ correspond au littéral / ([^ /] +) correspond à un ou plusieurs caractères qui ne sont pas / - le nom du fichier \ .jpg correspond à .jpg à la fin ( $ )
Une excellente ressource pour essayer votre expression régulière est Regex101 .
Vous essayez de regrouper le fichier se terminant ensemble en utilisant des accolades [] qui crée une sélection de l'un des trois caractères j , p ou g . Le point n'est pas échappé et donc - dans la syntaxe regex - est n'importe quel caractère. Puisque vous n'ajoutez jamais de multiplicateur (comme + pour 1 caractère ou plus, * pour 0 caractère ou plus ou ? pour un caractère facultatif), vous ne faites correspondre que quelques lettres au total.
Si vous voulez en savoir un peu plus sur tous les opérateurs, modificateurs et concepts similaires, Je recommande de lire la documentation du module re de python.
Vous pouvez soit réécrire l'expression régulière en quelque chose comme ceci (extraire le premier groupe afin de récupérer le nom de fichier) ou utiliser le fait qu'il existe une bibliothèque de traitement de chemin dans le package os :
from os.path import basename a = '/content/drive/My Drive/Logo/adidas10.jpg' filename = basename(a)
Vous pouvez voir cette expression régulière en action ici.
Depuis vous semblez déjà avoir des objets de chemin disponibles, vous pouvez cependant simplement extraire le basename du chemin, qui dans votre cas sera le nom du fichier:
^.*\/([^\/]+\.jpg).*$
filename serait maintenant adidas10.jpg
Merci les gars, maintenant je vois les erreurs que j'ai faites, cela a été très utile et instructif.
Je suis heureux que nous puissions vous aider. J'ai ajouté un autre lien vers un bon endroit pour commencer à en apprendre davantage sur la syntaxe des expressions régulières dans la réponse. J'espère que cela vous aidera dans votre cheminement pour devenir un maître des regex :-)
Vous utilisez une classe de caractères qui sera l'un des caractères répertoriés. Ainsi, votre motif ([\ w \ s .-]). [Jpg] capturera dans un groupe correspondant à l'un des [\ w \ s.-] , puis correspondra correspond à n'importe quel caractère sauf une nouvelle ligne en raison du point . puis correspond à l'un des [jpg] .
Pour vos données d'exemple, cela vous donnera un groupe de capture pour L et une correspondance pour og ainsi qu'un groupe de capture pour 0 , 1 , 3 et une correspondance pour .j
Si vous voulez obtenir le nom de marque comme adidas à partir de vos exemples comme vous l'indiquez dans votre question, vous pouvez utiliser un groupe de capture.
/([^/]*[^/\d])\d*\.jpg
Cela correspondra
/ Match littéralement ( Groupe de capture (il contiendra le nom de la marque)
[^ /] * Ne correspond pas à un / 0 fois ni à un / en utilisant un classes de caractères [^ / \ d] Ne correspond pas à un / ou à un chiffre ) Fermer le groupe \ d * Correspond à 0 fois ou plus un chiffre \ .jpg Correspondance .jpg C'est exactement l'expression que j'ai fini par utiliser après avoir peaufiné la précédente qui m'a été donnée. Merci beaucoup 🙏
veuillez lire ce que signifie
[...]et
.d'ailleurs