Подтвердить что ты не робот

Удалить префикс из строки

Я пытаюсь сделать следующее, в ясном питоническом ключе:

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

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

Это дает:

xtensions

Это не то, что я ожидал (extensions). Очевидно (глупо мне), потому что я неправильно использовал lstrip: lstrip удалит все символы, которые появляются в переданной строке chars, не считая эту строку как действительная строка, но как "набор символов для удаления из начала строки".

Есть ли стандартный способ удаления подстроки из начала строки?

4b9b3361

Ответ 1

Я не знаю о "стандартном пути".

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

Ответ 2

Короткий и сладкий:

def remove_prefix(text, prefix):
    return text[text.startswith(prefix) and len(prefix):]

Ответ 3

Как насчет этого (немного поздно):

def remove_prefix(s, prefix):
    return s[len(prefix):] if s.startswith(prefix) else s

Ответ 4

regex solution (не используйте, используйте решение @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

Ответ 5

Я думаю, вы можете использовать методы типа 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

Ответ 6

def remove_prefix(str, prefix):
    if str.startswith(prefix):
        return str[len(prefix):]
    else:
        return str

В качестве примечания в примечании str - это плохое имя переменной, поскольку оно тени типа str.