Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式从Python中的字符串中删除html标记_Python_Regex_String_Substring - Fatal编程技术网

正则表达式从Python中的字符串中删除html标记

正则表达式从Python中的字符串中删除html标记,python,regex,string,substring,Python,Regex,String,Substring,我使用以下代码从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标记。请尝试: pattern =

我使用以下代码从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标记。

请尝试:

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

快速肮脏的方式:

def remove_html_tags(text):
    pattern = re.compile(r'<.*?>')
    return pattern.sub('', text)
def删除html标签(文本):
模式=重新编译(r“”)
返回模式.sub(“”,文本)

但是对于一个更健壮的解决方案,我建议您研究一下。

有一种简单的方法可以做到这一点,而不需要使用正则表达式。这是一个强健的解决方案:

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
def删除html标记:
tag=False
quote=False
out=“”
对于s中的c:
如果c==''且不加引号:
tag=False
elif(c==“'”或c==”)和标记:
quote=不引用
elif非标记:
out=out+c
返回
这里解释了这一想法:

您可以看到它在这里工作:

PS-如果你对这个类感兴趣(关于python的智能调试),我给你一个链接:。它是免费的


不客气!:)

我认为这是合适的!@Jeroen:不,这不合适。这太愚蠢了。你根本没有读过这个问题吗?他已经在使用xpath!!!你们这些人会停下来用脑子换一换吗?@tchrist:我可能误解了什么,但现在我觉得你好像没有真正读过他的问题。他使用的是xpath,对吧,但他在评估后得到的是HTML。除此之外,还有一个事实:没有必要不友好,兄弟。@naeg:我非常强烈地感觉1732348的答案只是一个被重复得难以置信的笑话。它对人们没有帮助。我觉得它非常不友好,所以我一有机会就投反对票。@tchrist:itimo提供了帮助,因为它解释了使用正则表达式解析html/xml是错误的,您应该使用一些解析器。我第一次阅读了这个答案,发现它有趣而正确(不仅是问题的公认答案,还有其他答案)@naeg:正则表达式在这种情况下可以正常工作。更好的解决方案可能是
text=lxml.html.fromstring(text).text\u content()
,但需要额外的包。您阅读了链接吗?一般来说,不要使用正则表达式解析html,在某些情况下,您的正则表达式可能会严重失败并将一切都搞糟。