pour mon application CGI J'écris une fonction pour obtenir la langue préférée du navigateur (fournie dans la variable HTTP_ACCEPT_LANGUAGE). Je veux trouver toutes les étiquettes de langue dans cette variable avec des expressions régulières (Le modèle général d'une étiquette de langue est défini dans RFC1766). EBNF de RFC1766 ('1 * 8ALPHA' signifie un à huit caractères ASCII):Expressions régulières Python - Correspondance complète
Language-Tag = Primary-tag *("-" Subtag)
Primary-tag = 1*8ALPHA
Subtag = 1*8ALPHA
j'ai écrit cette expression régulière pour une étiquette de langue:
(([a-z]{1,8})(-[a-z]{1,8})*)
Si j'utilise cette expression, module re de Python fournit les éléments suivants
>>import re
>>re.findall("(([a-z]{1,8})(-[a-z]{1,8})*)", "x-pig-latin en-us de-de en", re.IGNORECASE)
[('x-pig-latin', 'x', '-latin'), ('en-us', 'en', '-us'), ('de-de', 'de', '-de'), ('en', 'en', '')]
Le résultat est correct. Mais je n'ai besoin que de matches complets comme 'de-de' ou 'x-pig-latin'. Puis-je supposer que le premier match d'un groupe est toujours le plus complet? Ou y a-t-il un drapeau indiquant les matchs les plus complets?
Stefan
Merci, c'est exactement ce que je recherche. Je n'ai jamais utilisé l'opérateur?: Avant. – Stefan