Когда я пытался ответить на этот вопрос: regex to split %ages and values in python Я заметил, что мне пришлось переупорядочить группы из результата findall. Например:Захват названных групп в regex с re.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', но это легко изменить порядок их после того, как тот факт, как я показал в своем втором ответе: http://stackoverflow.com/a/25629693/20789 –
То, что я предполагал, но не смог найти документацию, чтобы заявить об этом. Отсюда мой вопрос. – ashwinjv