str.lstrip()意外行为

时间:2015-07-18 07:21:33

标签: python

我正在研究scrapy项目,并试图解析我的配置

字符串为attr_title我必须删除' attr _'得到title。我使用了lstrip(' attr _'),但得到了意想不到的结果。我知道lstrip可以解决这些问题并删除它们,但很难理解它。

In [17]: "attr.title".lstrip('attr.')
Out[17]: 'itle'

PS:我知道有多种解决方案可以提取字符串我有兴趣了解这一点。

2 个答案:

答案 0 :(得分:9)

lstrip iterates覆盖结果字符串,直到没有更多的组合与最左边的字符集匹配

下面有一点说明。

In [1]: "attr.title".lstrip('attr.')
Out[1]: 'itle'  # Flow --> "attr." --> "t" --> Next char is 'i' which does not match any combination hence, iteration stops & end result ('itle') is returned

In [2]: "attr.tritle".lstrip('attr.')
Out[2]: 'itle' # "attr." --> "t" --> "r" --> Next char is 'i' which does not match any combination hence, iteration stops & end result ('itle') is returned

In [5]: "attr.itratitle".lstrip('attr.')
Out[5]: 'itratitle' # "attr." --> Next char is 'i' which does not match any combination hence, iteration stops & end result ('itratitle') is returned

答案 1 :(得分:5)

"attr.title".lstrip('attr.')

表示"从给定字符串的左侧删除每个attr.,直到没有这样的字符为止发生。

然后它接受给定的字符串并移除a,两个tr.t,因为它们所有都包含在给定的模式中。

i停止,因为它不包含在模式中。