Is there a pythonic way to do what the str.strip()
method does, except for all occurrences, not just those at the beginning and end of a string?
Example:
>> '::2012-05-14 18:10:20.856000::'.strip(' -.:')
>> '2012-05-14 18:10:20.856000'
I want
>> '::2012-05-14 18:10:20.856000::'.crazy_function(' -.:')
>> '20120514181020856000'
Does Python provides me a built-in crazy_function
???
I could easily do it programatically, but I want to know if there is a built-in for that.
Couldn't find one. Thank you for your help.
Use the translate
function to delete the unwanted characters:
>>> '::2012-05-14 18:10:20.856000::'.translate(None, ' -.:')
'20120514181020856000'
Be sure your string is of str
type and not unicode
, as the parameters of the function won't be the same. For unicode, use the following syntax ; it consists in building the dict of unicode ordinals from the chars to delete and to map them to None
:
>>> u'::2012-05-14 18:10:20.856000::'.translate({ord(k):None for k in u' -.:'})
u'20120514181020856000'
Some timings for performance comparison with 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
You could do it easily enough with re.sub
>>> import re
>>> re.sub(r"[ -.:]", r"", "'::2012-05-14 18:10:20.856000::'")
'20120514181020856000'
>>>
No. I don't think there is a built in.
I would do it this way:
>>> s = '::2012-05-14 18:10:20.856000::'
>>>
>>> ''.join(x for x in s if x not in ' -.:')
'20120514181020856000'
>>>