在我的一个项目中,我对以下场景感到震惊:
word = 'mixed4d_pre_relu'
word.strip('_pre_relu')
Out[5]: 'mixed4d'
Run Code Online (Sandbox Code Playgroud)
这里的输出符合预期。
但是,当我执行以下操作时:
word = 'mixed4e_pre_relu'
word.strip('_pre_relu')
Out[5]: 'mixed4' # No 'e' here, yyy?
Run Code Online (Sandbox Code Playgroud)
有谁知道这种行为的原因是什么?
根据评论,.strip()获取字符列表并删除所有字符 - 不是特别要删除的字符串。它将在字符串的末尾执行此操作,向内移动,直到找到不属于该字符集的内容,此时它将停止。
另一种可以满足您需求的替代方案(至少在本例中)是正则表达式替换:
>>> import re
>>> re.sub(r'_pre_relu$', '', word)
'mixed4d'
Run Code Online (Sandbox Code Playgroud)
这只是查找_pre_relu字符串最末尾的文本,从而充当rstrip(). 等效的lstrip()替换是r'^_pre_relu',它将删除字符串最开头的文本。