Tira quitando más personajes de lo esperado

¿Alguien puede explicar lo que está pasando aquí?

s = 'REFPROP-MIX:METHANOL&WATER' s.lstrip('REFPROP-MIX') # this returns ':METHANOL&WATER' as expected s.lstrip('REFPROP-MIX:') # returns 'THANOL&WATER' 

¿Qué pasó con ese ‘YO’? ¿Es un colon un carácter especial para lstrip? Esto es particularmente confuso porque funciona como se espera:

 s = 'abc-def:ghi' s.lstrip('abc-def') # returns ':ghi' s.lstrip('abd-def:') # returns 'ghi' 

str.lstrip elimina todos los caracteres en su argumento de la cadena, comenzando por la izquierda. Dado que todos los caracteres en el prefijo izquierdo “REFPROP-MIX: ME” están en el argumento “REFPROP-MIX:”, todos esos caracteres se eliminan. Igualmente:

 >>> s = 'abcadef' >>> s.lstrip('abc') 'def' >>> s.lstrip('cba') 'def' >>> s.lstrip('bacabacabacabaca') 'def' 

str.lstrip no elimina cadenas completas (de longitud mayor que 1) de la izquierda. Si quieres hacer eso, usa una expresión regular con un ancla ^ al principio:

 >>> import re >>> s = 'REFPROP-MIX:METHANOL&WATER' >>> re.sub(r'^REFPROP-MIX:', '', s) 'METHANOL&WATER' 

El método mencionado por @PadraicCunningham es una buena solución para el problema particular como se indica.

Simplemente divida por el carácter separador y seleccione el último valor:

 s = 'REFPROP-MIX:METHANOL&WATER' res = s.split(':', 1)[-1] # 'METHANOL&WATER'