для моего приложения CGI. Я пишу функцию, чтобы получить предпочтительный язык браузера (указанный в переменной HTTP_ACCEPT_LANGUAGE). Я хочу найти все языковые метки в этой переменной с регулярными выражениями (общий шаблон языкового тега определен в RFC1766). EBNF из RFC1766 ('1 * 8ALPHA' означает, что один на восемь ASCII символов):Регулярные выражения Python - Полное совпадение
Language-Tag = Primary-tag *("-" Subtag)
Primary-tag = 1*8ALPHA
Subtag = 1*8ALPHA
Я написал это регулярное выражение для тега языка:
(([a-z]{1,8})(-[a-z]{1,8})*)
Если я использую это выражение, повторно модуль питона поставляет следующие
>>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', '')]
Результат правильный. Но мне нужны только полные матчи, такие как de-de или x-pig-latin. Могу ли я предположить, что первое совпадение группы всегда самое полное? Или есть флаг, показывающий re, чтобы показать самые полные матчи?
Стефан
Спасибо, это именно то, что я ищу. Я никогда раньше не использовал оператор?:. – Stefan