如何在Python中去除中文标点符号

6
我有以下句子,想要删除所有标点符号。
首页 » 政策法规 » 正文吉林省实施《中华人民共和国老年人权益保障法》若干规定   发布时间: 2008-01-04              

我想删除所有中文标点符号,包括空格 " "。以下是我的代码:
line = line.decode("utf8")
line = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*():;《)《》“”()»〔〕-]+".decode("utf8"), "".decode("utf8"),line)

然而,我仍然有未删除的空格。我想知道是否存在更简单的方法来删除中文标点符号?

我本来想在我的问题中添加另一句话“想做/兼_职/学生_/的、加我Q:1 5.8 0.!!??86。0.2。3有惊喜哦”,但是我无法发布它。 - flyingmouse
我认为你的例子已经足够了,那个句子可能是垃圾信息,请不要加入到问题中。 - Remi Guan
2个回答

9
因为大多数中文标点符号都是 Unicode 编码,所以我们需要将字符串转换为 Unicode 编码才能去除中文标点符号。
# !/usr/bin/env python2
# -*- coding:utf-8 -*-  


import re
punc = "!?。。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏."
punc = punc.decode("utf-8")
line = "测试。。去除标点。。,、!"
print re.sub(ur"[%s]+" %punc, "", line.decode("utf-8"))

2
很好!只需提醒在Python 3中将ur替换为r;在Pandas中,可以应用类似的策略:comments['chinese_review'].str.replace(r"[%s]+"%punc, "").astype(str) - Chris Tang
在Python 3中,同样不需要使用.decode() - Raptor

-1

re.sub 是 sub(pattern, repl, string, count=0, flags=0)

根据你的代码,pattern 是 Unicode,repl 也是 Unicode(实际上不需要解码),

但是 string 是 UTF-8 编码的字符串而不是Unicode

试试这个方法:

print re.sub(ur"[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*():;《)《》“”()»〔〕-]+", "", s.decode("utf8"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接