如何在Python中使用正则表达式?

-1 投票
2 回答
1214 浏览
提问于 2025-04-16 01:12

我正在尝试从谷歌的建议中提取关键词,这里是网址:

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

正则表达式匹配开放标签,除了XHTML自包含标签

这是一个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中出现额外的元素而搞混。

撰写回答