Проблема в том, что в ([A-Za-z]+)=('(.*?)'|"(.*?)")
у вас есть четыре группы, а вам нужно только две (вероятно, вы нашли странные результаты). Если вы используете ([A-Za-z]+)=('.*?'|".*?")
, то все будет в порядке. Помните, что вы можете исключить группировку, поставив (?:)
, так что это будет эквивалентно: ([A-Za-z]+)=('(?:.*?)')|"(?:.*?)")
.
РЕДАКТИРОВАТЬ : Я только что понял, что это решение будет включать окружающие кавычки, которые вам не нужны. Вы можете легко снять их, хотя. Вы также можете использовать обратную ссылку, но тогда у вас будет одна дополнительная группа, которую следует удалить в конце, например:
import re
from operator import itemgetter
x = "type='text' TYPE=\"TEXT\""
print map(itemgetter(0,2), re.findall("([A-Za-z]+)=(['\"])(.*?)\\2", x))
дает [('type', 'text'), ('TYPE', 'TEXT')]
.