Python 2.x中的条带特定标点符号

时间:2012-01-13 22:06:15

标签: python string strip

我正在使用Python v2.6,我有一个字符串,其中包含一些我想要删除的标点字符。现在我已经看过使用string.punctuation()函数但不幸的是,我想删除除了fullstops和破折号之外的所有标点字符。总共只有5个标点符号我想要删除 - ()\"'

有什么建议吗?我希望这是最有效的方式。

由于

6 个答案:

答案 0 :(得分:1)

使用string.translate

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