【问题标题】:How to regex in python?如何在python中进行正则表达式?
【发布时间】:2010-07-13 04:28:26
【问题描述】:

我正在尝试解析来自谷歌建议的关键字,这是网址:

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,因为我认为正则表达式的代码会更少。

【问题讨论】:

  • 你能发布你正在尝试使用的python代码吗?
  • 我确信 python 有一个强大的 XML 解析器。你为什么使用正则表达式?
  • @Kobi 实际上不止一个。
  • 我不知道如何用正则表达式或 xml 解析来解析它,一个例子会很棒。我的 python 代码将是 re.match(我发布的模式)

标签: python xml regex parsing


【解决方案1】:

你可以使用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】:

    RegEx match open tags except XHTML self-contained tags

    这是一个 XML 文档。请重新考虑一个 XML 解析器。它会更健壮,最终可能会花更少的时间,即使它是更多的代码。

    【讨论】:

    • 您能否提供一个关于如何在 python 中使用 xml 解析器的示例?我的情况与正则表达式相同。
    • @jahmax:我认为上面的 Marcelo Cantos 在展示一个在 Python 中运行的 DOM 样式 XML 解析器方面做得很好。
    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多