如何在Python中替换字符串中的标点符号?

时间:2012-09-15 13:12:49

标签: python string replace

我想在Python的字符串中用<“替换(而不是删除)所有标点字符。

是否有以下风味的效果?

text = text.translate(string.maketrans("",""), string.punctuation)

6 个答案:

答案 0 :(得分:42)

这个答案适用于Python 2,仅适用于ASCII字符串:

字符串模块包含两个可以帮助您的东西:标点字符列表和“maketrans”函数。以下是如何使用它们:

import string
replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation))
text = text.translate(replace_punctuation)

答案 1 :(得分:14)

来自Best way to strip punctuation from a string in Python

的修改后的解决方案
import string
import re

regex = re.compile('[%s]' % re.escape(string.punctuation))
out = regex.sub(' ', "This is, fortunately. A Test! string")
# out = 'This is  fortunately  A Test  string'

答案 2 :(得分:1)

有一个更强大的解决方案,它依赖于正则表达式排除,而不是通过大量的标点符号来包括。

import re
print(re.sub('[^\w\s]', '', 'This is, fortunately. A Test! string'))
#Output - 'This is fortunately A Test string'

正则表达式可以捕获不是字母数字或空格字符的任何内容

答案 3 :(得分:0)

替换为''?

将所有;翻译成''并删除所有;之间的区别是什么?

以下是删除所有;

s = 'dsda;;dsd;sad'
table = string.maketrans('','')
string.translate(s, table, ';')

你可以用翻译替换。

答案 4 :(得分:0)

以我的具体方式,我删除了“+”和“&amp;”来自标点符号列表:

all_punctuations = string.punctuation
selected_punctuations = re.sub(r'(\&|\+)', "", all_punctuations)
print selected_punctuations

str = "he+llo* ithis& place% if you * here @@"
punctuation_regex = re.compile('[%s]' % re.escape(selected_punctuations))
punc_free = punctuation_regex.sub("", str)
print punc_free

结果:他+ llo ithis&amp;如果你在这里的地方

答案 5 :(得分:0)

此解决方法在python 3中有效:

import string
ex_str = 'SFDF-OIU .df  !hello.dfasf  sad - - d-f - sd'
#because len(string.punctuation) = 32
table = str.maketrans(string.punctuation,' '*32) 
res = ex_str.translate(table)

# res = 'SFDF OIU  df   hello dfasf  sad     d f   sd'