2011-03-18 38 views
2

我發現這個線程:Best way to strip punctuation from a string in Python有效地去掉標點符號而不是「.COM」

但希望能想出一個辦法做到這一點,除了不剔除在鏈接的時期。因此,如果字符串是

I love using stackoverflow.com on Fridays, Saturdays and Mondays! 

它會返回

I love using stackoverflow.com on Fridays Saturdays and Monday 

其實最好我能在共同的鏈接結尾的列表通過像.com,.net和.ly等

+2

如何在空白字符之前刪除標點符號?或者這不夠「夠好」? – 2011-03-18 16:23:33

+0

嗯想到這一點,但不會刪除上例中的感嘆號。 – JiminyCricket 2011-03-18 16:26:54

+0

我認爲菲利克斯的解決方案是這裏的方式。例如,您忘記了諸如programmers.stackexchange.com之類的各種有效域名。雖然,我想知道爲什麼有人會想要首先去掉標點符號。 – 2011-03-18 16:29:40

回答

5

您可以使用排除查找aheads:

[,!?]|\.(?!(com|org|ly)) 
3

約定建議您在.,!之後使用空格或類似的東西。如果你可以指望正確的輸入,你可以創建一個正則表達式,只有在後面跟着空格時纔會去掉這些字符。 (或至少這樣做與完整的字符)。

下面的正則表達式將確定這些:

[.,!?-](\s|$) 

的另一種可能性是用法律TLD名的列表。前綴如www.或其他格式如@,它們保留原始標點符號。

1

怎麼樣的(這是幾乎什麼費利克斯·克林已經建議):

original = 'I love using stackoverflow.com on Fridays, Saturdays and Mondays!' 
unwanted_chars = ',.!?;:' 

bits = original.split() 
cleaned_up = ' '.join([bit.strip(unwanted_chars) for bit in bits]) 
print cleaned_up 
# I love using stackoverflow.com on Fridays Saturdays and Mondays 

編輯:

PS:'然後清空'會被刪除字符串

+0

+1:可能是一個劃線:'cleaned_up =''.join([bit.strip(',。!?;')for original.split()]) – martineau 2011-03-18 17:37:40