【问题标题】:How to loop using .split() function on a text file python如何在文本文件python上使用.split()函数循环
【发布时间】:2013-11-18 05:48:41
【问题描述】:

我有一个 html 文件,其中包含不同的团队名称。我只是想抓住球队的名字。团队名称总是出现在某些文本之后并在某些文本之前结束,所以我已经拆分函数来查找团队名称。我是一个初学者,我确信我比现在更难。数据就是文件

teams = data.split('team-away">')[1].split("</sp")[0]
    for team in teams:
        print team

这将返回它找到的第一个团队的每个单独的字符(例如,如果团队 = San Francisco 49ers,它会打印“S”,然后是“A”等,而不是我需要它做的事情:打印“旧金山 49 人队”然后在下一行下一个球队“卡罗来纳黑豹队”等。

谢谢!

【问题讨论】:

  • 解析 HTML。不要将其作为字符串使用。
  • 是的,我想知道多久有人链接到“小马托尼”。 OP 确实声明“我有一个 html 文件......团队名称总是出现在某些文本之后并在某些文本之前结束”假设 @sdeep27 正确描述了问题(除了他自己知道),那么纯文本搜索工作 100 %(当然,不是最佳实践)。

标签: python web-scraping


【解决方案1】:

“我是一个初学者,我确信我比现在更难。”

嗯,有点。

import re
teams = re.findall('team-away">(.*)</sp', data)

(感谢 Kurtis,提供了一个比我原来更简单的正则表达式)

虽然实际的HTML parser 是最佳实践。

【讨论】:

  • 出于好奇,为什么这个正则表达式优于 re.findall('team-away">(.*?)', data)
  • @Kurtis,你是对的。我曾假设findall 会匹配整个 正则表达式,所以我使用了lookbehind 和lookahead。但如果只存在一个捕获组,则返回的匹配只是该组。现在改进答案。
  • 所以我去查看了一些重新以了解您的答案,这确实解决了它,谢谢。快速的问题,因为我只需要返回的字母而不是数字,我尝试了 (\w*) 而不是 (.*) 并且它返回了一个空列表。你知道为什么会这样,还是 \w 使用了错误的表达方式?
  • 我不确定你的意思。也许([A-Za-z]*).*
  • 不是 \w 所有字母的正则表达式标识符吗?我们为什么要改用 [A-Za-z] 格式?
【解决方案2】:

不要重新发明轮子!查看BeautifulSoup,它会为你工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2020-05-30
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多