2016-05-24 125 views
1

我試圖使用sed從一個巨大的語料庫(超過2百萬行)中刪除標籤,但它不匹配特殊字母字符(例如ãẽéó)與'任何字符' 正則表達式sed與點(。)不匹配的特殊字母字符

樣品從語料庫(。):

<ext id=1 cad="Opinião" sec="opi" sem="94a"> 
PT no governo 
Gilberto Dimenstein 

BRASÍLIA Pesquisa Datafolha publicada hoje revela um dado supreendente: recusando uma postura radical, a esmagadora maioria (77%) dos eleitores quer o PT participando do Governo Fernando Henrique Cardoso . 

我想刪除所有標籤(它們都遵循與 「轉ID = [0-9] CAD」 等相同的結構) ,所以我試圖用

sed 's/<.\+>//g' file1.txt > file2.txt 

它爲大多數人創造了奇蹟,但由於我提到的特殊字母字符,我仍然有一些剩餘。我該怎麼辦?

+0

的代碼適用於我對你的樣品輸入。你能舉一個代碼失敗的例子嗎?顯示您使用的輸入和輸出。你收到。 – John1024

+1

您的語言環境設置和該文件的編碼將被添加importabt細節。具體而言,在'C'語言環境中,每個字節都被視爲一個單獨的字符,但是如果該文件使用多字節或可變長度編碼(如UTF-8),則非ASCII字符佔用多個字節。 – tripleee

+1

使用正則表達式解析或編輯XML/HTML可能非常脆弱。通常的建議是使用XML特定的解析器。 –

回答

1

在您的具體情況,可能是最簡單的方法是使用[^>]字符類標籤的內容相匹配:

​​

這隻有標籤內容相匹配的一個額外的好處,原始正則表達式會從第一個標記的開始處直到最後一個標記的末尾刪除。例如,給定

foo <a...> bar <b...> baz 

原始表達式將取代<a...> bar <b...>

foo baz 

但是這一次將取代<a...><b...>

foo bar baz 
+0

@TobySpeight好吧,這段長度的代碼不需要解釋,而且這裏沒有魔法。我回答這個問題只是爲了解決問題,而不是爲了教育人們。對不起。 – pdg

+0

我爲你添加了一個解釋。 HTH –