【问题标题】:Python - How to find all substrings with a pattern in HTML?Python - 如何在 HTML 中查找所有具有模式的子字符串?
【发布时间】:2020-03-06 13:41:53
【问题描述】:

我正在使用 Python 读取 HTML 数据,但我很难从该 HTML 中找到“d:Title>Good To Great</d:Title>”之间的所有子字符串。

data = "<html><head></head><body><pre style='word-wrap': break-word; white-space: pre-wrap;
d:Title&gt;Good To Great&lt;/d:Title&gt;d:ComplianceAssetId m:null='true'/&gt;
d:Title&gt;War and Peace&lt;/d:Title&gt;/d:ComplianceAssetId m:null='false'/&gt; 
d:Title&gt;The Great Gatsby&lt;/d:Title&gt;/entry&gt;&lt;/feed&gt;</pre></body></html>"

预期输出:

['Good To Great', 'War and Peace', 'The Great Gatsby']

我怀疑正则表达式可能是一个解决方案,但我对正则表达式的了解有限(仍在学习),谁能帮我解决这个问题?

提前感谢您的帮助。

【问题讨论】:

  • 嗨 bangbangbangbang,请查看 re 包以获取有关内置包的详细信息。您还可以在 Google 上搜索“深入 Python 3”,在那里您可以找到一本非常方便的书,其中涵盖了基本的 Python 3,包括正则表达式处理。
  • 我怀疑正则表达式可能是一个解决方案:如果您还没有,请参阅this

标签: python html regex string


【解决方案1】:

正则表达式是'Title&amp;gt;([\w\s]+)&amp;lt;/d:Title'

Python 3.7 版。我希望这会有所帮助。

【讨论】:

    【解决方案2】:
    >>> re.findall('Title&gt;(.*)&lt;/d:Title', data)
    ['Good To Great', 'War and Peace', 'The Great Gatsby']
    

    您可以使用通配符. 来查找文本。

    【讨论】:

    • 谢谢。但我的输出是 ["Good To Great</d:Title>d:ComplianceAssetId m:null='true'/>d:Title>War and Peace</d:Title>/d:ComplianceAssetId m:null=' false'/> d:Title>The Great Gatsby"] 有没有办法只在中间保留书名?
    • 这很奇怪。括号应该从返回值中过滤掉其他文本。
    • .* 应该是 .*? 以使其不贪婪。
    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多