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) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
test_string = "toto_toto_tata_temperature_mensuelle_20210523-20250526.nc"
J'ai également une expression régulière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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