Когда я пытался ответить на этот вопрос: regex для разделения% возрастов и значений в python я заметил, что мне пришлось переупорядочить группы из результата findall. Например:
data = """34% passed 23% failed 46% deferred"""
result = {key:value for value, key in re.findall('(\w+)%\s(\w+)', data)}
print(result)
>>> {'failed': '23', 'passed': '34', 'deferred': '46'}
Вот результат findall:
>>> re.findall('(\w+)%\s(\w+)', data)
>>> [('34', 'passed'), ('23', 'failed'), ('46', 'deferred')]
Есть ли способ изменить/указать порядок групп, который возвращает re.findall:
[('passed', '34'), ('failed', '23'), ('deferred', '46')]
Просто чтобы уточнить, вопрос:
Можно ли указать порядок или изменить порядок групп для возврата функции re.findall?
Я использовал приведенный выше пример, чтобы создать словарь, чтобы указать причину/вариант использования, когда вы хотите изменить порядок (сделав ключ значением, а значение — ключом).
Дальнейшее уточнение:
Чтобы обрабатывать группы в более крупных и сложных регулярных выражениях, вы можете называть группы, но эти имена доступны только при выполнении re.search pr re.match. Из того, что я прочитал, findall имеет фиксированные индексы для групп, возвращаемых в кортеже. Вопрос в том, кто-нибудь знает, как эти индексы можно изменить. Это поможет упростить работу с группами и сделать ее интуитивно понятной.
findall
, но их легко изменить постфактум, как я показал во втором ответе: stackoverflow.com/a/25629693/20789 - person Dan Lenski   schedule 02.09.2014