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

Python 从字符串中删除所有出现的几个字符,python,string,string-formatting,built-in,Python,String,String Formatting,Built In,是否有一种pythonic方法来执行该方法所执行的操作,除了所有发生的事件,而不仅仅是字符串开头和结尾的事件 例如: >> '::2012-05-14 18:10:20.856000::'.strip(' -.:') >> '2012-05-14 18:10:20.856000' 我想要 >> '::2012-05-14 18:10:20.856000::'.crazy_function(' -.:') >> '20120514181020856

是否有一种pythonic方法来执行该方法所执行的操作,除了所有发生的事件,而不仅仅是字符串开头和结尾的事件

例如:

>> '::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_函数

我可以很容易地通过编程实现,但我想知道是否有一个内置的。 找不到。感谢您的帮助。

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

>>> '::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

使用
re.sub

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

不,我认为没有内置的

我会这样做:

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

谢谢,但这是“程序化的”。看看另一个使用Translate的答案,我更喜欢这样的内置解决方案,而不是尼克·克雷格·伍德(Nick Craig Wood)写的解决方案。但我想知道:在性能方面,有什么更好?我可能错了,但是这个“translate”函数可能使用了regexp函数。@弗朗西斯科:我想实际上有两个不同的translate函数。3-ARUMENT版本使用字节序列,它使用快速转换表。unicode版本处理字符串,它一个接一个地替换字符,实际上与regexp一样慢,如果不是更慢的话。我仍然会使用正则表达式来解决您的问题,因为混合字符串和字节序列从来都不是一个好主意,即使在python2中也是如此。@thg435:在我的问题中,字节版本就是最好的。我正在基于str(datetime.datetime.now())创建id代码,并向其中添加一段额外的字符串。所以,unicode对我来说不是问题。@Francisco:如果您在代码中创建这些字符串,为什么不直接使用strftime呢?@thg435:刚刚检查了strftime,使用str(now())比使用now()更快一倍。strftime(“%Y%m%d%H%m%s%f”)