2016-10-14 174 views
1

如何從一行中刪除標點符號,但保留標點符號使用re ??保留標點符號

例如:

Input = "Hello!!!, i don't like to 'some String' .... isn't" 
Output = (['hello','i', 'don't','like','to', 'some', 'string', 'isn't']) 

我試圖做到這一點:

re.sub('\W+', ' ', myLine.lower()).split() 

但這分裂像 「」 到t

+0

搜索空格+'或'+空格而不是\ W。 – JulienD

+0

@JulienD:感謝您的快速回復!!我對Python和RegEx是一種新手!!所以我不明白你的意思!!你的意思是這樣的:「re.sub('+','' ,myLine.lower())。split())「 –

+0

拆分並去掉標點符號 –

回答

1

你可以在你的正則表達式使用lookarounds:

>>> input = "Hello!!!, i didn''''t don't like to 'some String' .... isn't" 
>>> regex = r'\W+(?!\S*[a-z])|(?<!\S)\W+' 
>>> print re.sub(regex, '', input, 0, re.IGNORECASE).split() 
['Hello', 'i', "didn''''t", "don't", 'like', 'to', 'some', 'String', "isn't"] 

RegEx Demo

\W+(?!\S*[a-z])|(?<!\S)\W+一個不字,非空格字符不具備在前面位置的字母或明信匹配在一個或多個非空格字符之後定位。

+1

就像魅力一樣工作!!謝謝!!這是我們能做到這一點的最佳方式嗎?還是我們有更優化的方法? ?(PS:只是想了解更多,沒有錯誤的建議方法) –

+0

我認爲lookarounds是使用正則表達式的唯一可能的方式。 – anubhava

+1

真棒!!非常感謝! –