剥离删除比预期更多的字符

时间:2015-12-15 18:49:01

标签: python string

任何人都可以解释这里发生了什么:

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

'我'发生了什么事?冒号是lstrip的特殊字符吗?这特别令人困惑,因为这可以按预期工作:

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

2 个答案:

答案 0 :(得分:7)

str.lstrip从字符串中删除其参数中的所有字符,从左侧开始。由于左前缀中的所有字符" REFPROP-MIX:ME"在参数" REFPROP-MIX:"中,所有这些字符都被删除了。同样地:

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

str.lstrip 从左侧删除整个字符串(长度大于1)。如果您想这样做,请在开头使用带有锚^的正则表达式:

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

答案 1 :(得分:0)

对于上述特定问题,@ PadraicCunningham提到的方法是一个很好的解决方法。

只需用分隔符分开,然后选择最后一个值:

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