用于从字符串x中删除所有标点符号。 我想使用re.findall(),但我一直在努力知道在中写什么 ... 我知道我可以写下所有标点符号:
import string
y = string.punctuation
但如果我写:
re.findall(y,x)
它说:
raise error("multiple repeat")
sre_constants.error: multiple repeat
有人可以解释我们应该在re.findall
函数中写出什么?
答案 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'