2010-09-07 28 views
11

我需要從Python中的字符串中刪除標籤。如何使用正則表達式從Python中的字符串中刪除標籤? (不在HTML中)

<FNT name="Century Schoolbook" size="22">Title</FNT> 

什麼是最有效的方式來刪除兩端的整個標籤,只留下「標題」?我只看到了用HTML標籤做這件事的方法,這在Python中並不適合我。我特別用這個GIS程序ArcMap。它有自己的佈局元素標籤,我只需要刪除兩個特定標題文本元素的標籤。我相信正則表達式應該可以正常工作,但我願意接受任何其他建議。

+0

做你想做標題是標題完成後,或標題或<>標題<>或? ,不確定你的問題是什麼? – Doon 2010-09-07 19:51:30

+0

那麼處理後該字符串應該是什麼樣子?我不完全清楚你想做什麼。 – 2010-09-07 19:51:53

+2

對不起。處理後字符串應該是「標題」。 – 2010-09-07 19:52:56

回答

48

這應該工作:

import re 
re.sub('<[^>]*>', '', mystring) 

對大家說,正則表達式是不適合工作的正確工具:

問題的背景是這樣的,所有的反對關於定期/上下文免費語言無效。他的語言基本上由三個實體組成:a = <,b = >c = [^><]+。他想要刪除任何發生的acb。這相當直接地將他的問題描述爲涉及上下文無關語法的問題,並且將其定性爲常規語法並不困難。

我知道每個人都喜歡「你不能用正則表達式解析HTML」的答案,但是OP不想解析它,他只是想執行一個簡單的轉換。

+0

這沒有奏效。它返回了原始字符串。謝謝 – 2010-09-07 20:25:46

+0

對不起,我忘記了所有重要的'*'字符。再試一次? – Domenic 2010-09-07 20:43:55

+0

它工作!謝謝。這就是我需要的。 – 2010-09-07 22:03:55

2

如果只是解析和檢索值,你可以看看BeautifulStoneSoup。

3

搜索此正則表達式並將其替換爲空字符串應該工作。

/<[A-Za-z\/][^>]*>/ 

(從蟒殼)實施例:

>>> import re 
>>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>' 
>>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string) 
Title 
+0

那也沒用。你能給我一個你如何使用這個搜索和替換的例子嗎?我試過了,它返回了原始字符串。 – 2010-09-07 20:46:41

+0

添加了一個示例。你忘了進口嗎? – 2010-09-07 21:32:56

1

如果源文本被良好的XML,則可以使用STDLIB模塊ElementTree

import xml.etree.ElementTree as ET 
mystring = """<FNT name="Century Schoolbook" size="22">Title</FNT>""" 
element = ET.XML(mystring) 
print element.text # 'Title' 

如果源ISN沒有良好的結構,BeautifulSoup是一個很好的建議。正如幾位海報人員指出的那樣,使用正則表達式解析標籤並不是一個好主意。

+0

如果FNT在「標題」中間會包含另一個標籤,則只打印內部標籤之前的部分。 – vvondra 2014-02-07 10:18:50

-2

使用XML解析器,如ElementTree。正則表達式不適合這份工作。

+0

除非輸入不能保證是格式良好的XML,在這種情況下,正則表達式可以說是工作中唯一合理的工具。我也願意打賭,正則表達式的處理速度要比處理字符串作爲XML文檔快得多。 – 2010-09-07 21:41:52

+2

如果輸入不是格式良好的XML,那麼實現完整的解析器將是正確的方法。語法很複雜,正則表達式不夠。 – 2010-09-08 00:43:59

2

請避免使用正則表達式。儘管正則表達式可以處理簡單的字符串,但如果你得到一個複雜的字符串,你將來會遇到問題。

您可以使用BeautifulSoup get_text()功能。

from bs4 import BeautifulSoup 

text = '<FNT name="Century Schoolbook" size="22">Title</FNT>' 
soup = BeautifulSoup(text) 

print(soup.get_text()) 
相關問題