我正在使用Python v2.6,我有一个字符串,其中包含一些我想要删除的标点字符。现在我已经看过使用string.punctuation()
函数但不幸的是,我想删除除了fullstops和破折号之外的所有标点字符。总共只有5个标点符号我想要删除 - ()\"'
有什么建议吗?我希望这是最有效的方式。
由于
答案 0 :(得分:1)
s = ''' abc(de)f\gh"i' '''
print(s.translate(None, r"()\"'"))
# abcdefghi
或re.sub:
import re
re.sub(r"[\\()'\"]",'',s)
但string.translate
似乎要快一个数量级:
In [148]: %timeit (s*1000).translate(None, r"()\"'")
10000 loops, best of 3: 112 us per loop
In [146]: %timeit re.sub(r"[\\()'\"]",'',s*1000)
100 loops, best of 3: 2.11 ms per loop
答案 1 :(得分:1)
>>> import re
>>> r = re.compile("[\(\)\\\\'\"]")
>>> r.sub("", "\"hello\" '(world)'\\\\\\")
'hello world'
答案 2 :(得分:1)
您可以str.translate(table[, deletechars])
使用table
设置为None
,这将导致deletechars
中的所有字符从字符串中删除:
s.translate(None, r"()\"'")
一些例子:
>>> "\"hello\" '(world)'".translate(None, r"()\"'")
'hello world'
>>> "a'b c\"d e(f g)h i\\j".translate(None, r"()\"'")
'ab cd ef gh ij'
答案 3 :(得分:1)
您可以列出您不想要的所有字符:
unwanted = ['(', ')', '\\', '"', '\'']
然后你可以像这样创建一个函数strip_punctuation(s)
:
def strip_punctuation(s):
for u in unwanted:
s = s.replace(u, '')
return s
答案 4 :(得分:0)
您可以创建要替换的所有字符的字典,并用您选择的字符替换它们。
char_replace = {"'":"" , "(":"" , ")":"" , "\":"" , """:""}
for i,j in char_replace.iteritems():
string = string.replace(i,j)
答案 5 :(得分:0)
my_string = r'''\(""Hello ''W\orld)'''
strip_chars = r'''()\'"'''
使用理解:
''.join(x for x in my_string if x not in strip_chars)
使用过滤器:
''.join(filter(lambda x: x not in strip_chars, my_string))
输出:
Hello World