Ответ 1
Я не знаю о "стандартном пути".
def remove_prefix(text, prefix):
if text.startswith(prefix):
return text[len(prefix):]
return text # or whatever
Я пытаюсь сделать следующее, в ясном питоническом ключе:
def remove_prefix(str, prefix):
return str.lstrip(prefix)
print remove_prefix('template.extensions', 'template.')
Это дает:
xtensions
Это не то, что я ожидал (extensions
). Очевидно (глупо мне), потому что я неправильно использовал lstrip: lstrip удалит все символы, которые появляются в переданной строке chars
, не считая эту строку как действительная строка, но как "набор символов для удаления из начала строки".
Есть ли стандартный способ удаления подстроки из начала строки?
Я не знаю о "стандартном пути".
def remove_prefix(text, prefix):
if text.startswith(prefix):
return text[len(prefix):]
return text # or whatever
Короткий и сладкий:
def remove_prefix(text, prefix):
return text[text.startswith(prefix) and len(prefix):]
Как насчет этого (немного поздно):
def remove_prefix(s, prefix):
return s[len(prefix):] if s.startswith(prefix) else s
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
Я думаю, вы можете использовать методы типа 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
def remove_prefix(str, prefix):
if str.startswith(prefix):
return str[len(prefix):]
else:
return str
В качестве примечания в примечании str
- это плохое имя переменной, поскольку оно тени типа str
.