【问题标题】:Regular Expression to remove html tags from a string in Python正则表达式从 Python 中的字符串中删除 html 标签
【发布时间】:2011-11-05 19:37:33
【问题描述】:

我正在使用以下代码从 RSS 提要中获取我的结果:

try:
    desc = item.xpath('description')[0].text
    if date is not None:
        desc =date +"\n"+"\n"+desc
except:
    desc = None

但有时描述在 RSS 提要中包含 html 标签,如下所示:

这是示例文本

在显示内容时,我不希望在页面上显示任何 HTML 标记。是否有任何正则表达式可以删除 HTML 标签。

【问题讨论】:

  • 我认为这将是合适的! stackoverflow.com/questions/1732348/….
  • @Jeroen:不,这不合适。这很傻。你根本没有读过这个问题吗? 他已经在使用 xpath 了!!! 你们会不会只是裁员并用你的大脑来改变?
  • @tchrist:我可能误解了一些东西,但目前在我看来,您似乎并没有真正阅读他的问题。他正在使用 xpath,对,但他在评估后得到的是 HTML。除此之外:兄弟,没必要不友好。
  • @naeg:我非常强烈地觉得 1732348 的答案只是一个经常被重复的笑话。它对人们没有帮助。我觉得它非常不友好,所以我一有机会就投反对票。
  • @tchrist:imo 有帮助,因为它解释了使用正则表达式解析 html/xml 是错误的,您应该使用一些解析器。我第一次阅读该答案,发现它很有趣且正确(不仅是该问题的公认答案,还有其他答案)

标签: python regex string substring


【解决方案1】:

试试:

pattern = re.compile(u'<\/?\w+\s*[^>]*?\/?>', re.DOTALL | re.MULTILINE | re.IGNORECASE | re.UNICODE)
text = pattern.sub(u" ", text)

【讨论】:

  • @naeg:正则表达式适用于这种情况。更好的解决方案可能是text = lxml.html.fromstring(text).text_content(),但需要额外的包。
  • 您阅读链接了吗?只是一般情况下不要使用正则表达式来解析 html,总有一些情况你的正则表达式会失败并搞砸一切。
【解决方案2】:

快速而肮脏的方式:

def remove_html_tags(text):
    pattern = re.compile(r'<.*?>')
    return pattern.sub('', text)

但对于更强大的解决方案,我建议您查看Beautiful Soup

【讨论】:

    【解决方案3】:

    有一种不使用正则表达式的简单方法。这是一个强大的解决方案:

    def remove_html_markup(s):
        tag = False
        quote = False
        out = ""
    
        for c in s:
                if c == '<' and not quote:
                    tag = True
                elif c == '>' and not quote:
                    tag = False
                elif (c == '"' or c == "'") and tag:
                    quote = not quote
                elif not tag:
                    out = out + c
    
        return out
    

    这里解释了这个想法:http://youtu.be/2tu9LTDujbw

    你可以在这里看到它的工作原理:http://youtu.be/HPkNPcYed9M?t=35s

    PS - 如果你对课程感兴趣(关于使用 python 进行智能调试)我给你一个链接:http://www.udacity.com/overview/Course/cs259/CourseRev/1。免费!

    不客气! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      相关资源
      最近更新 更多