Odd bug in string.strip() using python 2.7 and 3.5 [duplicate]

百般思念 提交于 2019-12-24 12:51:04

问题


I am getting some very odd result on a quite simple string manipulation using string.strip(). I am wondering whether it's a problem that affects only me (something is wrong with my python installations?) or it's a common bug?

The bug is very wired and here it goes:

>>> a = './omqbEXPT.pool'
>>> a.strip('./').strip('.pool')
'mqbEXPT' #the first 'o' is missing!!!

It occurs only if an 'o' is following './' !

>>> a = './xmqbEXPT.pool'
>>> a.strip('./').strip('.pool')
'xmqbEXPT'

What's going on here?! I have tested this on both python 2.7 and 3.5 and the result doesn't change.


回答1:


This is how the strip method is actually designed to work.

The chars argument is a string specifying the set of characters to be removed.

The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:

So when you say my_string.strip('.pools'), it's going to remove all leading and trailing characters in that set (ie. {'.', 'p', 'o', 'l', 's'}).

You probably want to use str.replace or re.sub.

>>> './omqbEXPT.pool'.replace('./', '').replace('.pool', '')
'omqbEXPT'

>>> import re
>>> re.sub(r'^\.\/|\.pool$', '', './omgbEXPT.pool')
'omqbEXPT'



回答2:


string.strip() will left-strip and right-strip per character. Meaning, when you ask it to strip pool, it will remove any ps or os or ls it finds on the 2 ends of the string. This is why it's stripping off the o.




回答3:


It is not a bug. strip strips any charater that is in a string passed as an argument to it. So first you strip all leading and trailing dots and slashes from string a, and then all characters that string '.pool' consists of.



来源:https://stackoverflow.com/questions/35681789/odd-bug-in-string-strip-using-python-2-7-and-3-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!