2011-08-29 56 views
2

我使用下面的代码获取我的resut从RSS提要:正则表达式从字符串中删除html标记在Python

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

但有时说明包含RSS提要如下里面的html标签:

这是samle文本

< IMG SRC = “HTTP:// IMAGEURL” ALT = “”/>

得到控制而e显示内容我不希望任何HTML标签显示在页面上。是否有任何正则表达式来删除HTML标记。

+4

我认为这将是适当的! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags。 –

+0

@Jeroen:不,这不合适。这很傻。你没有读过这个问题吗? **他已经在使用xpath了!!! **你们的人们是否会裁员并利用你的大脑进行改变? – tchrist

+0

@tchrist:我可能误解了一些东西,但目前在我看来,你并没有真正阅读过他的问题。他正在使用xpath,对,但是他评估后得到的是HTML。除此之外:不需要不友好,兄弟。 – naeg

回答

1

尝试:

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

downvoted - 请参阅Jeroen对实际问题的评论。 – naeg

+1

@naeg:正则表达式适用于这种情况。更好的解决方案可以是'text = lxml.html.fromstring(text).text_content()',但需要额外的软件包。 – pricco

+0

您是否阅读过链接?一般情况下,不要使用正则表达式来解析html,总会有一些情况,你的正则表达式会失败并且搞砸一切。 – naeg

1

快速和肮脏的方式:

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

但一个更强大的解决方案,我建议你寻找到Beautiful Soup

1

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

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。免费!

不客气! :)

相关问题