从字符串中删除所有出现的几个字符

时间:2012-05-14 21:28:06

标签: python string string-formatting built-in

是否有一种pythonic方式来执行str.strip()方法的操作,除了所有次出现,而不仅仅是字符串开头和结尾处的那些?

示例:

>> '::2012-05-14 18:10:20.856000::'.strip(' -.:')
>> '2012-05-14 18:10:20.856000'

我想要

>> '::2012-05-14 18:10:20.856000::'.crazy_function(' -.:')
>> '20120514181020856000'

Python是否为我提供了内置的crazy_function ???

我可以轻松地以编程方式执行此操作,但我想知道是否有内置功能。 找不到一个。谢谢你的帮助。

3 个答案:

答案 0 :(得分:23)

使用translate功能删除不需要的字符:

>>> '::2012-05-14 18:10:20.856000::'.translate(None, ' -.:')
'20120514181020856000'

确保您的字符串属于str类型,而不是unicode,因为该函数的参数将不相同。对于unicode,请使用以下语法;它包括从要删除的字符构建unicode序列的dict并将它们映射到None

>>> u'::2012-05-14 18:10:20.856000::'.translate({ord(k):None for k in u' -.:'})
u'20120514181020856000'

re进行效果比较的一些时间安排:

>>> timeit.timeit("""re.sub(r"[ -.:]", r"", "'::2012-05-14 18:10:20.856000::'")""","import re")
7.352270301875713
>>> timeit.timeit("""'::2012-05-14 18:10:20.856000::'.translate(None, ' -.:')""")
0.5894893344550951

答案 1 :(得分:4)

您可以使用re.sub

轻松完成
>>> import re
>>> re.sub(r"[ -.:]", r"", "'::2012-05-14 18:10:20.856000::'")
'20120514181020856000'
>>> 

答案 2 :(得分:2)

没有。我不认为有内置。

我会这样做:

>>> s = '::2012-05-14 18:10:20.856000::'
>>> 
>>> ''.join(x for x in s if x not in ' -.:')
'20120514181020856000'
>>>