[英]strip only html anchor tags
我有以下代碼剝離所有標簽。 現在我只想剝離錨標簽。
x = re.compile(r'<[^<]*?/?>')
如何修改,以便只刪除錨標簽。
以下刪除所有標簽的代碼。
並不是的。 <div title="a>b">
是有效的HTML並被弄亂了。 <div title="<" onmouseover="script()" class="<">">
是無效的HTML,但是您經常在真實網頁上會發現這種東西。您的regexp會在活動標簽中留下帶有危險腳本的內容。
除非您的輸入集受到嚴格限制,否則您無法使用正則表達式執行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)
x = re.compile(r'<[aA]\>[^<]*?/?>')
這將匹配“ a”或“ A”,后跟單詞邊界。 請注意,它不會清除結束標記。
x = re.compile(r'</?[aA]\>[^<]*?/?>')
也會刪除結束標記。
編輯:
實際上,像這樣將[^<]
切換為[^>]
感覺更可靠。
x = re.compile(r'</?[aA]\>[^>]*?/?>')
我不確定這個Python是否正確(我是一個PHP專家,但我才開始學習python)。
re.sub('<[aA][^>]*>([^<]+)</[aA]>','\1','<html><head> .... </body></html>')
這不會一次刪除所有錨標記,因此您可能必須遍歷html字符串。 它匹配錨標記,並將匹配內容替換為標記的內容。 所以...
<a href="/">homepage</a> -> homepage
在大量文本上可能不是最有效的,但是可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.