23

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

有没有以下味道的东西?

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

6 回答 6

48

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

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

import string
replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation))
text = text.translate(replace_punctuation)
于 2012-09-15T13:23:49.027 回答
20

从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'
于 2012-09-15T13:21:25.020 回答
2

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

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

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

于 2018-08-02T14:12:46.060 回答
2

此解决方法适用于 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' 
于 2018-07-23T14:41:31.063 回答
0

替换为''?

;将 all 翻译成 '' 和 remove all有什么区别;

这是删除所有;

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

你可以用翻译来代替。

于 2012-09-15T13:24:55.120 回答
0

以我的具体方式,我从标点符号列表中删除了“+”和“&”:

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

结果:he+llo ithis& place if you here

于 2017-08-17T19:05:13.743 回答