我正在做一个scrapy项目,试图解析我的配置文件
字符串是attr_title
,我需要去掉"attr_"并得到title
。我使用了lstrip('attr_')
,但是结果出乎意料。我知道lstrip
会处理组合并将其删除,但是很难理解。
In [17]: "attr.title".lstrip('attr.')
Out[17]: 'itle'
PS: 我知道有多种方法可以提取我感兴趣的字符串,但我想了解这个过程。
我正在做一个scrapy项目,试图解析我的配置文件
字符串是attr_title
,我需要去掉"attr_"并得到title
。我使用了lstrip('attr_')
,但是结果出乎意料。我知道lstrip
会处理组合并将其删除,但是很难理解。
In [17]: "attr.title".lstrip('attr.')
Out[17]: 'itle'
PS: 我知道有多种方法可以提取我感兴趣的字符串,但我想了解这个过程。
lstrip
会迭代结果字符串,直到找不到与最左侧字符集匹配的组合为止。
以下是一个小例子。
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
strip
方法不会递归操作 - 它们使用简单的while
循环。如果您说“lstrip
在输入字符串上进行迭代操作”,则您的解释将更准确。有关详细信息,请参见do_argstrip()
(从第1882行开始)的源代码。 - PM 2Ring"attr.title".lstrip('attr.')
a
,t
,t
,r
和 .
直到不存在这样的字符为止。然后它将给定字符串并移除 a
,两个 t
,r
,.
和 t
,因为它们都包含在给定的模式中。当遇到 i
时停止,因为它不包含在模式中。.startswith()
方法不同,.lstrip()
不接受 tuple()
参数(以剥离整个字符串而不是单个字符)。 - jfs