Python中用于删除XML注释和HTML元素的正则表达式
我正在使用通用提要解析器解析RSS内容。在描述标签中,有时 我得到的信息如下: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元素/标记,我使用以下正则表
<!--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