簡體   English   中英

只刪除html錨標記

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM