2010-07-23 18 views
0

幫助,請從像字符串進行:需要在Python中的正則表達式幫助

<a href="http://testsite.com" class="className">link_text_part1 <em>another_text</em> link_text_part2</a> 

字符串,如:!

link_text_part1 another_text link_text_part2 

使用正則表達式在Python

注意 testsite.com的變化

+3

請不要使用正則表達式來做到這一點。請使用美麗的湯。 – 2010-07-23 10:35:40

+0

我需要使用Scrapy獲取數據(鏈接/鏈接文本)grove谷歌搜索 – Gennadich 2010-07-23 10:48:42

+0

S.Lott:謝謝,閱讀有關它 – Gennadich 2010-07-23 10:50:00

回答

1

所以你想刪除e <a><em>標籤?這是可以做到這樣的:

>>> s = '<a href="http://testsite.com" class="className">link_text_part1 <em>another_text</em> link_text_part2</a>' 

>>> re.sub("</?(a|em).*?>", "", s) 
'link_text_part1 another_text link_text_part2' 

在英語中,這個搜索:

  • 一個<字符
  • 可能後跟/(獲取結束標記)
  • 其次'a'或'em'
  • 後面跟着任何東西,包括第一個>字符

並用空字符串替換它們。

但是,正如科斯所說,使用正則表達式來解析HTML是非常危險和脆弱的,除非你知道你解析的HTML格式永遠不會改變。

+0

謝謝。但這並沒有幫助scrapy – Gennadich 2010-07-23 11:17:59

1
string = re.sub('<[^>]+>', '', string) 
+0

謝謝。但這也無濟於事 – Gennadich 2010-07-23 11:35:18

+0

你可能需要一個全局標誌。 – bluesmoon 2010-07-23 22:21:45

1

即使對於簡單的情況,也使用正則表達式解析HTML通常是非常不推薦的。你永遠不會知道你什麼時候碰到一些會讓你的正則表達式混淆的HTML代碼。

輕量級HTML解析器通常是更可靠和更優雅的解決方案。

+0

謝謝,我會記住的 – Gennadich 2010-07-23 11:18:50

0

順便說一句。這有助於:

from scrapy.utils.markup import remove_tags 
... 
bbb=remove_tags(aaa)