我想在Python中将字符串中的所有标点符号(而不是删除)替换为“ ”。
以下是否有类似以下代码效率高的方法?
以下是否有类似以下代码效率高的方法?
text = text.translate(string.maketrans("",""), string.punctuation)
text = text.translate(string.maketrans("",""), string.punctuation)
这个答案是针对Python 2的,只适用于ASCII字符串:
string模块包含两个有用的函数:一个标点字符列表和"maketrans"函数。你可以按照以下方式使用它们:
import string
replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation))
text = text.translate(replace_punctuation)
从 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'
string.punctuation.replace("'", "")
将得到 '!"#$%&()*+,-./:;<=>?@[\\]^_
{|}~'`。 - Gregor有一种更强大的解决方案,它依赖于正则表达式的排除而不是通过一个包含大量标点符号字符的列表进行包含。
import re
print(re.sub('[^\w\s]', '', 'This is, fortunately. A Test! string'))
#Output - 'This is fortunately A Test string'
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'
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
用''?
替换。
将所有;
翻译成''
和删除所有;
之间的区别是什么?
这里是删除所有;
的方法:
s = 'dsda;;dsd;sad'
table = string.maketrans('','')
string.translate(s, table, ';')
你可以使用 translate() 函数进行替换。