2017-07-09 58 views
-1

當我有一個字符串「瑪麗的!!」我想得到「瑪麗的!」,所以只有一個非字母字符在字符串中的每個單詞的開始和/或結尾被移除,而不是在單詞的中間。如何從單詞中刪除非字母字符 - 結束

我有這個迄今爲止在Python 3個

import re 
s = "Mary's!! string. With. Punctuation?" # Sample string 
out = re.sub(r'[^\w\d\s]','', s) 
print(out) 

此輸出:

"Marys string With Punctuation" 

它消除了一切,而應該是這樣的:

"Mary's! string With Punctuation" 
+0

分裂的空間和字符串非字母數字在結束了嗎? – PYA

+0

如果字符串的開頭和結尾不是以非字母字符開頭的話會怎麼樣? –

+0

是的,在空格上分割,最後取決於單詞是否有兩個非字母字符或更多,只是最後一個應該被刪除。 –

回答

1

您可能需要它旁邊有一個空格(或字符串的開始/結尾):

re.sub(r'(\s|^)[^\w\d\s]|[^\w\d\s](\s|$)', r'\1\2', s) 

,或者用環視:

re.sub(r'(?<!\S)[^\w\d\s]|[^\w\d\s](?!\S)', '', s) 
+0

謝謝,trincot它工作得很好 –

+0

環顧四周似乎也刪除了撇號。有沒有其他的方式來做到這一點與循環? –

+0

在第二個正則表達式中有一個錯字:它應該是'(?<!'而不是'(?!<'。 – trincot

相關問題