Ca marche ! ![]()
J’avoue que je ne comprends pas trop, parce que j’avais essayé une formule très similaire, qui ne fonctionne pas :
value = str(value)
# Gestion des espaces insécables (remplacer par des espaces normaux)
value = value.replace('\u00A0', ' ') # Espace insécable standard
value = value.replace('\u202F', ' ') # Espace insécable fine
value = value.replace('\u2007', ' ') # Espace figure
value = value.replace('\u2060', ' ') # Joiner sans chasse
# Gestion des retours à la ligne
value = value.replace('\r\n', '\n') # Normaliser les fins de ligne
value = value.replace('\r', '\n') # Convertir les CR en LF
# Supprimer les retours à la ligne
value = value.replace('\n', '')
# Nettoyage des caractères problématiques
value = value.replace('\t', ' ') # Remplacer les tabulations par des espaces
# Normaliser les espaces multiples
value = value.strip()
value = re.sub(r"\s+", ' ', value).strip()
val = Simple.lookupOne(nom_ref=value)
return val if val else value
La seule différence que j’identifie entre les deux formules, c’est que j’utilise value pour les opérations au lieu d’utiliser un nom pour la variable (value_str dans le cas de la formule qui fonctionne). J’imagine que ce n’est pas très malin d’utiliser value comme nom de variable, mais est-ce que cela explique vraiment la différence de comportement ?
Au-delà de cette question technique, j’ai adapté la formule avec l’excellente suggestion de ythianine (c’est vrai que l’utilisation de regex pour supprimer des espaces, ce n’est pas très élégant). Voici donc le résultat final :
value_str = str(value)
# Gestion des espaces insécables (remplacer par des espaces normaux)
value_str = value_str.replace('\u00A0', ' ') # Espace insécable standard
value_str = value_str.replace('\u202F', ' ') # Espace insécable fine
value_str = value_str.replace('\u2007', ' ') # Espace figure
value_str = value_str.replace('\u2060', ' ') # Joiner sans chasse
# Gestion des retours à la ligne
value_str = value_str.replace('\r\n', '\n') # Normaliser les fins de ligne
value_str = value_str.replace('\r', '\n') # Convertir les CR en LF
# Supprimer les retours à la ligne
value_str = value_str.replace('\n', '')
# Nettoyage des caractères problématiques
value_str = value_str.replace('\t', ' ') # Remplacer les tabulations par des espaces
# Normaliser les espaces multiples
value_str = " ".join(value_str.strip().split())
val = Simple.lookupOne(nom_ref=value_str)
return val if val else value
La formule conserve probablement des redondances, mais comme cela fonctionne je vais m’en tenir là pour le moment.
Un grand merci pour votre aide ! ![]()