我试图以明确的pythonic方式做以下事情:
def remove_prefix(str, prefix):
return str.lstrip(prefix)
print remove_prefix('template.extensions', 'template.')
Run Code Online (Sandbox Code Playgroud)
这给出了:
xtensions
Run Code Online (Sandbox Code Playgroud)
这不是我期待的(extensions).显然,(愚蠢的我),因为我已经使用lstrip错误:lstrip将删除其出现在考试中的所有字符chars的字符串,不考虑该字符串作为一个真正的字符串,而是"一组字符从字符串的开头删除" .
是否有一种从字符串开头删除子字符串的标准方法?
Python 2.6 (trunk:66714:66715M, Oct 1 2008, 18:36:04)
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> path = "/Volumes/Users"
>>> path.lstrip('/Volume')
's/Users'
>>> path.lstrip('/Volumes')
'Users'
>>>
Run Code Online (Sandbox Code Playgroud)
我期待输出path.lstrip('/Volumes')应该是/Users
我遇到了我认为是一个错误,我正在寻找确认或我不明白这个方法是如何工作的.
这是我的基本输出:
(Pdb) x = 'KEY_K'
(Pdb) x.lstrip('K')
'EY_K'
(Pdb) x.lstrip('KE')
'Y_K'
(Pdb) x.lstrip('KEY')
'_K'
(Pdb) x.lstrip('KEY_')
''
(Pdb) import sys
(Pdb) sys.version
'2.7.11 (default, Dec 5 2015, 14:44:47) \n[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)]'
Run Code Online (Sandbox Code Playgroud)
我的理解是,该示例中的最终'lstrip'应该返回'K',但事实并非如此.有谁知道为什么?
可能重复:
这是Python 2.7中的错误吗?
.lstrip()函数在某些字符串上(特别是带有下划线的字符串)并不像我预期的那样完全正常工作.例如,
In [1]: a='abcd_efg_hijk_lmno_pqrs_tuvw_xyz'
In [2]: a.lstrip('abcd_efg')
Out[2]: 'hijk_lmno_pqrs_tuvw_xyz'
Run Code Online (Sandbox Code Playgroud)
这里,'g'和'h'之间的'_'缺失.知道为什么会这样吗?