【问题标题】:Parsing a range of integers in a list解析列表中的整数范围
【发布时间】:2010-01-28 11:33:32
【问题描述】:

我刚开始学习 Python,遇到了一个小问题。 我需要解析一个文本文件,更具体地说是一个 HTML 文件(但它的语法很奇怪 - divs after divs after divs,Google 对某个 PDF 的“查看为 HTML”的结果我似乎无法提取文本因为它有一个用 m$ word 完成的凌乱表格)。

无论如何,我选择了一种相当低级的方法,因为我只需要尽快获得数据,而且由于我开始学习 Python,我认为学习基础知识对我也有好处。

除了一小部分我需要从一组 div 中检索一组整数之外,我已经完成了所有工作。这是一个例子:

<div style="position:absolute;top:522;left:1020"><nobr>*88</nobr></div>

现在我想检索&lt;nobr&gt;&lt;/nobr&gt; 中的所有数字(在这种情况下,'588'),因为它是一个非常混乱的文件,我必须确保我得到的内容是正确的。为此,&lt;nobr&gt;&lt;/nobr&gt; 中的数字必须以"left:1020""left:1024""left:1028" 开头。这是因为自动转换,在我看来,最好的选择是获取所有以left:102[0-] 开头的数字。

为此,我尝试使用:

for o in re.finditer('left:102[0-9]"><nobr>(.*?)</nobr></div>', words[index])
    out = o.group(1)

但到目前为止,还没有这样的运气......我怎样才能得到这些数字?

提前致谢, J.

【问题讨论】:

  • 我只是在检查,但在您正在消化的数据下方的行中,您有(in that case, '588'),但在数据行中&lt;nobr&gt;&lt;/nobr&gt; 之间的内容是*88。我会编辑和修复它,但我不知道哪个是正确的条目。

标签: python regex parsing syntax-error


【解决方案1】:

不要使用正则表达式来解析 HTML。 BeautifulSoup 会轻松解决这个问题。

至于您的具体问题,可能是您在第一行末尾缺少一个冒号:

for o in re.finditer('left:102[0-9]"><nobr>(.*?)</nobr></div>', words[index]):
    out = o.group(1)

如果这不是问题,请按照您期望的输出发布您遇到的错误。

【讨论】:

  • 是的,我听说过它,但我不确定它是否能够获取所有那些奇怪的 div,因此采用低级方法
  • @Hal:BeautifulSoup 可以根据属性查找标签,如果需要,它甚至可以接受正则表达式作为搜索参数。
  • 酷,不知道它这么强大。无论如何,我实际上已经完成了脚本,所缺少的只是获取这些整数。我想我可以简单地进行 10 次搜索,但这很愚蠢,我想了解如何在该字符串上使用正则表达式。
  • 你做到了。我根本没有收到任何错误,由于某种原因,该死的东西只会输出一个空格。感谢您忍受这种菜鸟废话,正是像您这样的人让 StackOverflow 如此出色。
猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多