如何在Python中使用正则表达式?
我正在尝试从谷歌的建议中提取关键词,这里是网址:
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 个回答
2
这是一个XML文档。请考虑使用XML解析器。这样会更可靠,最终可能会节省你更多时间,尽管代码可能会多一些。
5
你可以使用 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中出现额外的元素而搞混。