仅去除HTML锚点标签
我有一段代码,它可以去掉所有的标签。现在我想要的只是去掉链接标签。
x = re.compile(r'<[^<]*?/?>')
我该怎么改才能只去掉链接标签呢?
3 个回答
1
x = re.compile(r'<[aA]\>[^<]*?/?>')
这个会匹配字母'a'或'A'后面跟着一个单词的边界。注意,它不会去掉结束标签。
x = re.compile(r'</?[aA]\>[^<]*?/?>')
会把结束标签也去掉。
编辑:
其实,把[^<]
换成[^>]
感觉更可靠,像这样。
x = re.compile(r'</?[aA]\>[^>]*?/?>')
1
我不太确定这个Python代码是否正确(我主要是做PHP的,但现在开始自己学习Python)。
re.sub('<[aA][^>]*>([^<]+)</[aA]>','\1','<html><head> .... </body></html>')
这个方法一次不能把所有的锚点标签都去掉,所以你可能需要对整个HTML字符串进行循环处理。它会找到锚点标签,然后把找到的内容替换掉。所以……
<a href="/">homepage</a> -> homepage
在处理大量文本时,这个方法可能不是最有效的,但它是可以工作的。
5
以下代码可以去掉所有标签。
其实并不是这样。<div title="a>b">
是有效的HTML,但会被搞得一团糟。<div title="<" onmouseover="script()" class="<">">
是无效的HTML,但在真实网页上你经常会看到这种情况。你的正则表达式会留下一个包含危险脚本的活跃标签。
如果你想处理HTML,比如去掉标签,单靠正则表达式是行不通的,除非你对输入的内容限制得非常严格。最好使用一个真正的HTML解析器,逐步处理生成的文档,去掉不需要的元素。
比如,可以使用BeautifulSoup:
def replaceWithContents(element):
ix= element.parent.contents.index(element)
for child in reversed(element.contents):
element.parent.insert(ix, child)
element.extract()
doc= BeautifulSoup(html) # maybe fromEncoding= 'utf-8'
for link in doc.findAll('a'):
replaceWithContents(link)
str(doc)