2015-01-17 55 views
1

我想分割一個文本,其中包含將文字拆分爲音節的斜線。 例如如何在Python中分割一首詩

text = "Hi! I do/n'/t know how ma/ny sy/lla/bu/s a/re the/re i/n thi/s te/x/te, who kno/w." 
result = re.split('; |/| |. |, ', text) 

的問題是,我沒有得到正確的數音節,也沒有任何空間之前,最後一個字母!

請任何幫助!

+1

你要輸出什麼? –

回答

1

在正則表達式中,"."與任何字符匹配,所以". "匹配"{any character}{space}"

要匹配文字時間段,您需要使用"\."或將其放入字符集([.])中。

嘗試

syllables = re.compile("[.,:;!?]? |/").split 
text = "Hi! I do/n'/t know how ma/ny sy/lla/bu/s a/re the/re i/n thi/s te/x/te, who kno/w." 

print(syllables(text)) 

這給

['Hi', 'I', 'do', "n'", 't', 'know', 'how', 'ma', 'ny', 'sy', 'lla', 'bu', 's', 'a', 're', '', 'the', 're', 'i', 'n', 'thi', 's', 'te', 'x', 'te', 'who', 'kno', 'w.'] 
+0

非常感謝!我剛剛添加了\ n來處理行結束或其他方式多行的情況。但是,如果有多個空間,仍然存在問題!如何將它添加到教學大綱= re.split('[。,:;!?]?|/| \ n',text) – Othmane

+0

嘗試'「[。,:;!?]?+ | /」' (加上'+',意思是「一個或多個空格」) –

+0

謝謝它的作品!我只是想知道如果在行結束之前有一個或多個空格時需要添加什麼來處理這種情況'\ n' – Othmane

0

如果我理解正確的話,你可以使用str.translate和正常分裂:

from string import maketrans 
text = "Hi! I do/n'/t know how ma/ny sy/lla/bu/s a/re the/re i/n thi/s te/x/te, who kno/w." 
tr = maketrans("/,.'"," ") 
print(text.translate(tr)).split() 

['Hi!', 'I', 'do', 'n', 't', 'know', 'how', 'ma', 'ny', 'sy', 'lla', 'bu', 's', 'a', 're', 'the', 're', 'i', 'n', 'thi', 's', 'te', 'x', 'te', 'who', 'kno', 'w'] 

如果你想保持'do/n'/t

tr = maketrans("/,."," ") 
print(text.translate(tr)).split() 

['Hi!', 'I', 'do', "n'", 't', 'know', 'how', 'ma', 'ny', 'sy', 'lla', 'bu', 's', 'a', 're', 'the', 're', 'i', 'n', 'thi', 's', 'te', 'x', 'te', 'who', 'kno', 'w'] 

如果你想保留期限從maketrans刪除它也

+0

@HughBothwell,我補充說,這只是在maketrans中包含'''的問題,或者不是 –

+0

我同意;我只是把它指出來,看起來你已經在解決它了。 –

+0

@HughBothwell,我原本是這麼想的,但是開始第二次猜測,從OP的問題中不完全清楚它應該是什麼。 –