2015-01-17 115 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的问题中不完全清楚它应该是什么。 –