"""Module de post-traitement par expressions régulières (Regex). Contient les utilitaires de nettoyage pour corriger les déformations d'espaces introduites par l'IA sur les variables d'interpolation i18n ({user}, {{count}}, ). """ import re def post_process_variables(text: str) -> str: """Nettoie et resserre les espaces parasites introduits par l'IA autour des variables i18n et balises HTML. Transformations effectuées : - Accolades simples : { username } -> {username} - Accolades doubles : {{ count }} -> {{count}} - Balises HTML ouvrantes/fermantes : < a href='...' > -> , -> Args: text (str): La chaîne de texte traduite brute. Returns: str: La chaîne de texte nettoyée et conforme. """ if not text: return text # 1. Resserrer les accolades doubles : {{ var }} -> {{var}} text = re.sub(r'\{\{\s+([^{}\s]+)\s+\}\}', r'{{\1}}', text) text = re.sub(r'\{\{\s+([^{}\s]+)\}\}', r'{{\1}}', text) text = re.sub(r'\{\{([^{}\s]+)\s+\}\}', r'{{\1}}', text) # 2. Resserrer les accolades simples : { var } -> {var} text = re.sub(r'\{\s+([^{}\s]+)\s+\}', r'{\1}', text) text = re.sub(r'\{\s+([^{}\s]+)\}', r'{\1}', text) text = re.sub(r'\{([^{}\s]+)\s+\}', r'{\1}', text) # 3. Resserrer les balises HTML : < a > -> et -> text = re.sub(r'<\s+([a-zA-Z0-9]+)', r'<\1', text) text = re.sub(r'<\s*/\s*([a-zA-Z0-9]+)\s*>', r'', text) text = re.sub(r'<\s*([a-zA-Z0-9]+[^<>]*?)\s*>', r'<\1>', text) return text