保留一个单词的标点符号

时间:2016-10-14 21:10:01

标签: regex python-3.x

如何从一行删除标点符号,但使用 重新 保留标点符号

例如:

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()

但这会将“ ”等字词分为 don < EM>吨 即可。

1 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用外观:

>>> 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+匹配在前一个位置没有字母的非单词非空格字符或者在一个或多个非空格字符后面的下一个字母处的字母。