Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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/18.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中用于删除XML注释和HTML元素的正则表达式_Python_Regex_String - Fatal编程技术网

Python中用于删除XML注释和HTML元素的正则表达式

Python中用于删除XML注释和HTML元素的正则表达式,python,regex,string,Python,Regex,String,我正在使用通用提要解析器解析RSS内容。在描述标签中,有时 我得到的信息如下: <!--This is the XML comment --> <p>This is a Test Paragraph</p></br> <b>Sample Bold</b> <m:Table>Sampe Text</m:Table> 这是一个测试段落 粗体样本 样本文本 为了删除HTML元素/标记,我使用以下正则表

我正在使用通用提要解析器解析RSS内容。在描述标签中,有时 我得到的信息如下:

<!--This is the XML comment -->
<p>This is a Test Paragraph</p></br>
<b>Sample Bold</b>
<m:Table>Sampe Text</m:Table>

这是一个测试段落


粗体样本 样本文本
为了删除HTML元素/标记,我使用以下正则表达式

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

这有助于删除HTML标记,但不删除xml注释。如何删除元素和XML元素?

以这种方式使用正则表达式是个坏主意


我会在使用真正的解析器后导航DOM树,并以这种方式删除我想要的内容。

以这种方式使用正则表达式是个坏主意


我会在使用真正的解析器后导航DOM树,并以这种方式删除我想要的内容。

为什么这么复杂
re.sub(“|”,lambda m:m.group(1)或“”,desc,flags=re.DOTALL)


如果您希望XML标记保持完整,您可能应该在上查看HTML标记列表,并使用
'()| |'
regex。

为什么这么复杂
re.sub(“|”,lambda m:m.group(1)或“”,desc,flags=re.DOTALL)

如果希望XML标记保持完整,您可能应该在上查看HTML标记列表,并使用
'()| |'
regex。

使用:

使用:


使用纯Python有一种简单的方法:

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的智能调试),我给你一个链接:。它是免费的


不客气!

使用纯Python有一个简单的方法:

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的智能调试),我给您一个链接:。它是免费的


不客气

这还不够吗
r''
正确的方法是使用像@duffymo这样的XML解析器。在这种情况下,尝试使用解析器是一种过分的做法。您不需要知道树结构、标记名称空间、名称和属性就可以将它们扔掉,是吗?哦,@rplnt,你忘了CDATA(
更多的文本]]>
),这还不够吗
r''
正确的方法是使用像@duffymo这样的XML解析器。在这种情况下,尝试使用解析器是一种过分的做法。您不需要知道树结构、标记名称空间、名称和属性就可以将它们扔掉,是吗?哦,@rplnt,您忘记了CDATA(
更多文本]]>
)。根据此处接受的答案。用漂亮的汤来代替。你们这些来自禁酒运动的家伙真的把我吓坏了。正则表达式不能用于解析XML,因为标记可以嵌套(
),但它们可以用于剥离标记,因为标记只是尖括号之间的任何东西。看看维基百科,该死的。(对不起。)没有禁止regexp的运动,只是指出每个任务都应该使用正确的工具,在去掉标记之前,你必须找到它,你会怎么做?使用regexp?坏主意。那么到底为什么不好呢?因为DOM树有更多的上下文,它给你元素类型信息,并且它有一个很好的API(XPath)来查找东西。根据这里接受的答案。用漂亮的汤来代替。你们这些来自禁酒运动的家伙真的把我吓坏了。正则表达式不能用于解析XML,因为标记可以嵌套(
),但它们可以用于剥离标记,因为标记只是尖括号之间的任何东西。看看维基百科,该死的。(对不起。)没有禁止regexp的运动,只是指出每个任务都应该使用正确的工具,在去掉标记之前,你必须找到它,你会怎么做?使用regexp?不好的主意。那么到底为什么不好呢?因为DOM树有更多的上下文,它给你元素类型信息,并且它有一个很好的API(XPath)来查找东西。
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