从字符串中删除几个字符的所有出现(Remove all occurrences of several

2019-07-29 09:51发布

有没有一种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 ???

我可以很容易地做到这一点编程,但我想知道是否有一个内置的那个。 找不到一个。 谢谢您的帮助。

Answer 1:

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

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

确保您的字符串是str型,而不是unicode ,作为函数的参数,也不会是相同的。 对于Unicode,请使用以下语法; 它包括建设Unicode码的字典从字符删除,并把它们映射到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


Answer 2:

你可以做到这一点很容易足以与re.sub

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


Answer 3:

不,我不认为有一个内置的。

我会做这种方式:

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


文章来源: Remove all occurrences of several chars from a string