Python Regex - 删除特殊字符但保留撇号

时间:2012-07-09 21:30:15

标签: python regex

我试图从某些文本中删除所有特殊字符,这是我的正则表达式:

pattern = re.compile('[\W_]+', re.UNICODE)
words = str(pattern.sub(' ', words))

超级简单,但不幸的是,当使用撇号(单引号)时会导致问题。例如,如果我有“不”字样,则此代码返回“doesn”。

有没有办法调整这个正则表达式,以便在这样的实例中不删除撇号?

编辑:这就是我的目标:

doesn't this mean it -technically- works?

应该是:

  

这不意味着它在技术上有效吗

4 个答案:

答案 0 :(得分:13)

喜欢这个吗?

>>> pattern=re.compile("[^\w']")
>>> pattern.sub(' ', "doesn't it rain today?")
"doesn't it rain today "

如果还应该过滤掉下划线:

>>> re.compile("[^\w']|_").sub(" ","doesn't this _technically_ means it works? naïve I am ...")
"doesn't this  technically  means it works  naïve I am    "

答案 1 :(得分:1)

我能够使用此正则表达式将您的示例解析为单词列表:[a-z]*'?[a-z]+

然后你可以用空格加入列表中的元素。

答案 2 :(得分:0)

怎么样

re.sub(r"[^\w' ]", "", "doesn't this mean it -technically- works?")

答案 3 :(得分:0)

([^\w']|_)+怎么样?

请注意,这不适用于以下内容:

doesn't this mean it 'technically' works?

这可能不完全是你所追求的。