16

文字列の最初と最後だけでなく、すべてのstr.strip()出現箇所を除いて、メソッドが行うことを実行するための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_functionか?

プログラムで簡単に行うことができましたが、そのための組み込みがあるかどうかを知りたいです。見つかりませんでした。ご協力ありがとうございました。

4

3 に答える 3

23

このtranslate関数を使用して、不要な文字を削除します。

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

関数のパラメータは同じではないため、文字列はstrタイプであり、ではないことを確認してください。unicodeUnicodeの場合、次の構文を使用します; これは、文字からユニコード序数の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
于 2012-05-14T21:30:19.480 に答える
4

あなたはそれを十分に簡単に行うことができますre.sub

>>> import re
>>> re.sub(r"[ -.:]", r"", "'::2012-05-14 18:10:20.856000::'")
'20120514181020856000'
>>> 
于 2012-05-14T21:30:54.133 に答える
2

いいえ、ビルトインはないと思います。

私はそれをこのようにします:

>>> s = '::2012-05-14 18:10:20.856000::'
>>> 
>>> ''.join(x for x in s if x not in ' -.:')
'20120514181020856000'
>>> 
于 2012-05-14T21:32:06.470 に答える