Python 从字符串中删除所有出现的几个字符
是否有一种pythonic方法来执行该方法所执行的操作,除了所有发生的事件,而不仅仅是字符串开头和结尾的事件 例如: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
>> '::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”)