Aksl
-
15 juin 2022 à 18:03
Whismeril
Messages postés18399Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mai 2023
-
20 juin 2022 à 14:47
Bonjour à tous,
J'utilise regex pour extrait des informations dans un nom de fichier.
Par exemple j'extrait MIDI, PLA, GEN, 067 et le numéro de révision E dans "MIDI-PLA-GEN-067-2022V2_Screenshots_E"
Mais il arrive fréquement que les utilisateurs oublient de mettre la révision "MIDI-PLA-GEN-067-2022V2_Screenshots".
Je cherche une regex qui me permet d'extrait le numéro de révision si il est présent, but sans erronément prendre d'autres caractères.
Avec la regex MIDI-(?<std_building_type>[a-zA-Z]{1,4})-(?<std_building_activity>\w{1,3})-(?<std_building_no_fiche>\d{1,3})-(?<title>.*)(_(?<std_building_ind>[a-zA-Z])), il me détecte S comme numéro de révision si je n'en indique pas un.
L'exemple est disponible ici : https://regex101.com/r/HoAnAN/1
Merci pour votre aide.
A voir également:
Extraction optionnelle partielle de chaine avec regex
Whismeril
Messages postés18399Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mai 2023623 Modifié le 15 juin 2022 à 19:26
Bonjour
oui, la capture s'arrête là 2022V2_S donc avec S, parce que tu lui a dit que "le point de repère" est un _, or sans numéro de révision le dernier _ est là.
Je vois 2 options, mais elle dépendent d'informations que tu n'as pas données.
Pour la première façon de faire
Est ce que ces datas sont au milieu de tout un tas d'autres dans un grand texte (dans ce cas poste un exemple représentatif de ce qu'il y a avant et après)?
Est que ces datas constituent systématiquement une ligne dans un grand texte?
Ou est ce que ces datas constituent la totalité du texte que tu traites?
Pour la seconde façon de faire, est-ce que cette partie "2022V2" est toujours de ce type, à savoir une année, le V est un numéro constitué d'un ou plusieurs chiffres (lettres? ) ?
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Le fichier est constitué de 3 parties : (code)-(texte libre)_(revision)
S'agissant du nom de fichier, il n'y a ni caractères avant, ni après. L'exemple donné est la chaîne de caractère.
La partie "2022V2_Screenshots" correspond au texte libre du nom de fichier. Je n'ai pas de maîtrise sur l'utilisateur. Il insère lui même des underscore sans que je puisse le lui interdire.
Dit en langage naturel, voici ce que je souhaitais que la regex fasse (séquentiellement) :
Elle doit commencer par MIDI-
Extraire les caractères alphanumériques jusqu'au prochain tiret (= type)
Extraire les caractères alphanumériques jusqu'au prochain tiret (= activity)
Extraire les chiffres jusqu'au prochain tiret (no_fiche)
Extraire le dernier caractère alphanumérique de la chaine si précédé d'un underscore (= revision)
Whismeril
Messages postés18399Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mai 2023623 Modifié le 20 juin 2022 à 14:46
Bonsoir
OK, alors il faut indiquer que la capture va jusqu'à la fin du texte (avec $) et que le _ et la lettre sont facultatifs