2016-06-15 122 views
0

我正在寫一個python腳本來爲幾個文本文件中的單詞分配語法類別。在每個文本文件中,我在尖括號<>內有文件頭。在整篇文章中,還有附加的行,包括時間戳,頁碼和抄錄器中的問題等信息。我想刪除這些行。這基本上是文本文件的樣子:Python,使用正則表達式消除尖括號內的行

<title  Titipuru Supay> 
<speaker name> 
<sex  female> 
<dialect Pastaza> 
<register narrative> 
<contributor name> 

chan; payguna serenkya man chiga; 
<ima?> 
payguna kirina man, chiga, mana 
shayachira; ninagunan shi tujsirani nira: 
illaparani nira shi illapay 
<173> 
pasasha, ima shi kasna nin, nisha, 

即使有相同數量的每個頭文件的其他<>材料而異,所以我不能只是消除特定行。所以我想我會嘗試一些簡單的方法,像re.sub語句,它可以消除所有內容,包括括號在內的所有內容。

with open(file, encoding='utf-8') as file_in: 
     text = file_in.read() 
     re.sub(r"<.*>", " ", text) 

我試過<。*>上pythex.org和regex101它與測試字符串這兩個地方的工作,但不是在我的腳本(是的,我有進口重)。我也試過其他的解決方案,如:\<.*\>

我只是沒有得到正確的或正確的東西嗎?

+3

你怎麼知道它是不是工作?你是否堅持're.sub()'的某個地方的結果? - 它不適用 - 生成一個新的字符串。 – alecxe

+0

我在它下面添加了一個打印(文本)語句,並且在輸出中我可以看到所有的<>材質仍然保留 – Wangana

+1

嘗試'text = re.sub(r「<[^>」*>「,」「,text )'。否則,請添加更多文本以進行測試。 –

回答

1

據我瞭解,你可以在同一條線上有幾個<...>。在這種情況下,你是一個否定的字符級解決方案,更安全:

text = re.sub(r"<[^>]*>", " ", text) 

text變量,當然應該爲Python中的字符串是不可變的更新,而正則表達式現在匹配<,然後零或除>之外的更多字符,然後是>

regex demo

Regular expression visualization

+0

嗯,我確實有這個代表,但現在不再了,當我回到15歲時,我一定會回來投票你的答案。再次感謝。 – Wangana

4

字符串是不可變,意思是它們不能修改,只能重新分配。 re.sub(...)正在工作,但它返回一個新的字符串。試試這個:

text = re.sub(r"<.*>", " ", text) 

如果仍然不能正常工作,請給我們更多的信息,關於您的問題

+1

這也是我寫出來的解決方案。您需要用其他名稱替換該行,因爲re.sub會返回一個新字符串,而不會替換輸入的字符串。 – HMSCelestia

+0

Ooops,是的,我想我忘記了文字=,但是我做到了,而且大部分工作,我仍然有頭部的碎片出現在這裏和那裏,始終與第一個支架: 。 <14:46 – Wangana

+0

@AlexR。,你能否提供一個它不起作用的例子,以便我們可以測試它? – Brian