Вы можете использовать etree
:
>>> from xml.etree.ElementTree import XMLParser
>>> x = XMLParser()
>>> x.feed('<toplevel><CompleteSuggestion><suggestion data=...')
>>> tree = x.close()
>>> [(e.find('suggestion').get('data'), int(e.find('num_queries').get('int')))
for e in tree.findall('CompleteSuggestion')]
[('test internet speed', 31800000), ('test', 686000000), ...]
Это больше кода, чем регулярное выражение, но он также делает больше.В частности, он извлекает весь список совпадений за один раз и удаляет любые странные вещи, такие как двойные кавычки в атрибуте data
.Также не запутается, если в XML начнут появляться дополнительные элементы.