Bonjour,
Désolée par avance si la question a déjà été posée, je n'ai pas trouvé d'éléments pour résoudre mon problème.
Je cherche à remplacer des éléments d'une expression régulière par des valeurs déterminées.
Pour expliquer la démarche, je vais partir d'un exemple.
J'ai la chaîne de caractères suivante (en pratique, elle est beaucoup plus compliquée, je fais exprès de mettre des valeurs identiques à certains endroits) :
test_string = "toto_toto_tata_temperature_mensuelle_20210523-20250526.nc"
J'ai également une expression régulière :
test_regexp = re.compile(r"(?P<une_chaine>[^_]+)_(?P<une_autre_chaine>.*)_(?P<une_variable>[^_]+)_(?P<une_frequence>[^_]+)_(?P<une_periode>\d{4}\d*[-_]+\d{4}\d*)")
Avec re, je récupère les valeurs des différents groupes :
1 2 3 4 5
| regexp_match = test_regexp.match(test_string)
if regexp_match is not None:
my_groups = regexp_match.groupdict()
for elt in [elt for elt in my_groups if "period" in elt.lower()]:
del my_groups[elt] |
Je voudrais maintenant créer un template à partir de cette chaîne de caractère (pour pouvoir interpoler un nouveau nom de fichier en remplaçant juste la période).
Pour cela, je voudrais remplacer dans le pattern de l'expression régulière tous les groupes qui ne sont pas liés à une période pour obtenir quelque chose comme cela (en partant de my_groups) :
test_template = "toto_toto_tata_temperature_mensuelle_(?P<une_periode>\d{4}\d*[-_]+\d{4}\d*).nc"
Plusieurs groupes pourraient être concernés par ces exclusions pour le remplacement (pas seulement la période).
Je n'ai pas trouvé de fonctions/méthode dans re qui permettent ce remplacement (et je voudrais éviter de partir de la chaîne de caractères dans laquelle on pourrait imaginer avoir plusieurs fois une même chaine représentant une date sans avoir à toutes les remplacer).
Merci par avance pour vos retours sur ce qu'il serait possible de faire,
GaelleRig
Partager