176

私は明確なpythonicな方法で、次のことをしようとしています:

def remove_prefix(str, prefix):
    return str.lstrip(prefix)

print remove_prefix('template.extensions', 'template.')

これは与える:

xtensions

これは私が期待していたものではありません ( extensions)。明らかに (愚かな私)、lstripを間違って使用したため: lstrip は、渡された文字列に現れるすべての文字を削除しcharsます。その文字列を実際の文字列と見なすのではなく、「文字列の先頭から削除する文字のセット」と見なします。 .

文字列の先頭から部分文字列を削除する標準的な方法はありますか?

4

6 に答える 6

302

「標準的な方法」についてはわかりません。

def remove_prefix(text, prefix):
    if text.startswith(prefix):
        return text[len(prefix):]
    return text  # or whatever

@Borisと@Stefanが指摘したように、Python 3.9+では使用できます

text.removeprefix(prefix)

同じ動作で。

于 2013-06-03T06:52:10.553 に答える
47

これはどうですか(少し遅れています):

def remove_prefix(s, prefix):
    return s[len(prefix):] if s.startswith(prefix) else s
于 2013-06-03T06:52:56.913 に答える
14

strこれを行うには、このタイプのメソッドを使用できると思います。正規表現は必要ありません:

def remove_prefix(text, prefix):
    if text.startswith(prefix): # only modify the text if it starts with the prefix
         text = text.replace(prefix, "", 1) # remove one instance of prefix
    return text
于 2013-06-03T06:53:59.817 に答える
13

正規表現ソリューション(最良の方法は@Elazarによるソリューションです。これは単なる楽しみです)

import re
def remove_prefix(text, prefix):
    return re.sub(r'^{0}'.format(re.escape(prefix)), '', text)

>>> print remove_prefix('template.extensions', 'template.')
extensions
于 2013-06-03T06:49:55.877 に答える
2
def remove_prefix(str, prefix):
    if str.startswith(prefix):
        return str[len(prefix):]
    else:
        return str

余談strですが、型を隠すため、変数の名前としては不適切strです。

于 2013-06-03T06:53:41.790 に答える