如何从字符串中删除所有标点符号?

时间:2013-11-30 09:31:33

标签: python regex string punctuation

用于从字符串x中删除所有标点符号。 我想使用re.findall(),但我一直在努力知道在中写什么 ... 我知道我可以写下所有标点符号:

import string
y = string.punctuation

但如果我写:

re.findall(y,x) 

它说:

 raise error("multiple repeat")
 sre_constants.error: multiple repeat

有人可以解释我们应该在re.findall函数中写出什么?

2 个答案:

答案 0 :(得分:6)

您可能甚至不需要RegEx。你可以简单地使用translate,就像这样

import string
print data.translate(None, string.punctuation)

答案 1 :(得分:4)

string.punctuation中的多个字符在正则表达式中具有特殊含义。他们应该被逃脱。

>>> import re
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> import re
>>> re.escape(string.punctuation)
'\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~'

如果您想匹配其中任何一个,请使用字符类([...]

>>> '[{}]'.format(re.escape(string.punctuation))
'[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~]'

>>> import re
>>> pattern = '[{}]'.format(re.escape(string.punctuation))
>>> re.sub(pattern, '', 'Hell,o World.')
'Hello World'