Estoy tratando de hacer lo siguiente, de una manera clara y pythonica:
def remove_prefix(str, prefix): return str.lstrip(prefix) print remove_prefix('template.extensions', 'template.')
Esto da:
xtensions
Que no es lo que esperaba ( extensions
). Obviamente (estúpido), porque he usado lstrip incorrectamente: lstrip eliminará todos los caracteres que aparecen en la cadena de chars
pasados, no considerando esa cadena como una cadena real, sino como “un conjunto de caracteres para eliminar desde el principio de la cadena “.
¿Hay una forma estándar de eliminar una subcadena desde el principio de una cadena?
No sé de “forma estándar”.
def remove_prefix(text, prefix): if text.startswith(prefix): return text[len(prefix):] return text # or whatever
Corto y dulce:
def remove_prefix(text, prefix): return text[text.startswith(prefix) and len(prefix):]
¿Qué pasa con esto (un poco tarde):
def remove_prefix(s, prefix): return s[len(prefix):] if s.startswith(prefix) else s
Creo que puedes usar métodos del tipo str
para hacer esto. No hay necesidad de expresiones regulares:
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
solución de expresiones regulares (la mejor manera es la solución de @Elazar, es solo por diversión)
import re def remove_prefix(text, prefix): return re.sub(r'^{0}'.format(re.escape(prefix)), '', text) >>> print remove_prefix('template.extensions', 'template.') extensions
def remove_prefix(str, prefix): if str.startswith(prefix): return str[len(prefix):] else: return str
Como nota aparte, str
es un mal nombre para una variable porque oculta el tipo de str
.