Как регулярное выражение в Python? - PullRequest
0 голосов
/ 13 июля 2010

Я пытаюсь разобрать ключевые слова в Google, это URL:

http://google.com/complete/search?output=toolbar&q=test

Я сделал это с помощью php:

'|<CompleteSuggestion><suggestion data="(.*?)"/><num_queries int="(.*?)"/></CompleteSuggestion>|is'

Но это не будет работать с python re.match (pattern, string), я пробовал несколько, но некоторые показывали ошибку, а некоторые возвращали None.

Как я могу разобрать эту информацию? Я не хочу использовать minidom, потому что я думаю, что регулярное выражение будет меньше кода.

Ответы [ 2 ]

5 голосов
/ 13 июля 2010

Вы можете использовать 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 начнут появляться дополнительные элементы.

2 голосов
/ 13 июля 2010

RegEx соответствует открытым тегам, кроме автономных тегов XHTML

Это документ XML. Пожалуйста, пересмотрите анализатор XML. Он будет более надежным и, вероятно, займет меньше времени, даже если будет больше кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...