【问题标题】:Im trying to create the regular expression to include the text and not the href我试图创建正则表达式以包含文本而不是 href
【发布时间】:2017-10-20 02:39:09
【问题描述】:

我正在尝试创建一个正则表达式,它将包含 HTML 中的文本,但不包含网址。

这是代码:

<h2 class="story-heading"><a href="http://web.archive.org/web/20171012234502/https://www.nytimes.com/2017/10/12/us/politics/trump-obamacare-executive-order-health-insurance.html">Trump Allows for Cheaper, Less Regulated Health Plans</a></h2>

我尝试做正则表达式: &lt;h2 class="story-heading"&gt;(.*?)&lt;/a&gt;&lt;/h2&gt;

但我很困惑如何删除该行的 href 部分以仅包含文本?所以我需要它只返回“特朗普允许更便宜、监管更少的健康计划”

【问题讨论】:

  • 您最好使用可用的 html 解析器之一来解析 html,然后遍历结果而不是尝试手动解码。
  • 我们必须使用给我们的正则表达式测试器。有没有办法纯粹作为正则表达式来做到这一点?
  • 你可以用正则表达式来近似它,但它可能无法处理所有情况。
  • <.>(.*) 这个正则表达式对你很有帮助。

标签: python html regex


【解决方案1】:

你可以试试这个:

import re
s = '<h2 class="story-heading"><a href="http://web.archive.org/web/20171012234502/https://www.nytimes.com/2017/10/12/us/politics/trump obamacare-executive-order-health-insurance.html">Trump Allows for Cheaper, Less Regulated Health Plans</a></h2>'
final_data = re.findall('>([a-zA-Z,\s]+)</a></h2>', s)[0]

输出:

'Trump Allows for Cheaper, Less Regulated Health Plans'

【讨论】:

    【解决方案2】:

    这个表达式应该做你想做的事

    <h2 class="story-heading"><a.*?>(.*?)<\/a><\/h2>
    

    这与您最初尝试的唯一区别是它在结束时停止“>”,然后从那里捕获到下一个“

    只要您要查找的文本位于“a”标签之间,这应该可以工作。我不知道这有多有效。

    编辑:根据要求进一步解释:

    首先我们匹配故事标题

    <h2 class="story-heading">
    

    然后匹配链接标签的开始,然后是链接中的任何字符,直到我们找到该标签的结束。

    <a.*?>
    

    然后我们可以捕获任何字符,这将是我们正在寻找的标题

    (.*?)
    

    直到找到对应的链接标签和头标签的开头

    <\/a><\/h2>
    

    注意:反斜杠对于您使用的可能不是必需的,我添加它们是因为它们在我使用的工具中是必需的,如果我的解释不充分,这也可能有助于您理解:Online regex tester with explanations

    【讨论】:

    • 能否解释一下其中的各个部分,以便我可以重用/编辑其他实例的代码?
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多