是否有一种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
???
我可以轻松地以编程方式执行此操作,但我想知道是否有内置功能。 找不到一个。谢谢你的帮助。
答案 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'
>>>