2017-04-16 30 views
0

例如,我有字符串:如何打開一個例子Twitter發佈到它的HTML相當於

"<p class='foo'>Hello World</p>" 

那麼其結果必須是:

"&lt;p class='foo'&gt;Hello World&lt;/p&gt;" 

如果有一個鏈接在文本中,必須將其轉換爲HTML <a>標記。

此外,如果有一提,比如下面:

"<p>Hello World @Mark</p>" 

其結果將是

"&lt;p&gt;Hello World <a href='/users/Mark'>@Mark</a>&lt;/p&gt;" 

注:這是蟒蛇。是正則表達式可能的解決方案?

+0

爲什麼' DeepSpace

+0

用美麗的湯,以前類似的問題http://stackoverflow.com/questions/9857627/python-beautifulsoup-parsing-out-a-tweet – lxx

回答

0

可以使用cgi.escape功能首先逃脫你的字符串:

import cgi 
a = '"<p>Hello World @Mark</p>"' 
escaped = cgi.escape(a) 

# result will be: '&lt;p&gt;Hello World @Mark&lt;/p&gt;' 

然後你可以使用正則表達式來代替@馬克:

import re 
result = re.sub('(@([-._a-zA-Z0-9]+))', r'<a href="https://stackoverflow.com/users/\2">\1</a>', a) 

# result will be: '&lt;p&gt;Hello World <a href="https://stackoverflow.com/users/Mark">@Mark</a>&lt;/p&gt;' 

如果您需要<a href="...">...</a>轉義爲好,首先運行正則表達式。

+0

嗨帕維爾,你能解釋一下R「\1」是如何工作的?在這種情況下,/ 2和/ 1是什麼? – probot

+0

請參閱文檔:https://docs.python.org/2/library/re.html#re.sub \ 1,\ 2等 - 這是對正則表達式組的引用 –

+0

以下是引用來自python正則表達式文檔:「(...)匹配括號內的任何正則表達式,並指示組的開始和結束;可以在匹配執行後檢索組的內容,並且可以在字符串與\數字特殊序列進行比較,如下所述:要匹配文字'('或')',請使用\(或\),或將它們放在字符類中:[(] [)]。 –

0

關於@符號提,你既可以如你所說,或者只是通過串存儲@符號的盯着位置的每個字符手動循環,當你碰到一個性格不是正則表達式一個字母數字字符(例如一個空格或一個html標籤/實體),那麼在提及結束時你會知道你,所以你存儲結尾。使用類似字符串的子字符串函數來剪切其餘字符。

你的代碼的其餘部分具有HTML實體,只是撤消或刪除那些當準備輸出。

相關問題