These methods have confusing implicit behavior. I propose to make it explicit, either strip the exact sequence or chars or leave the string as is. In [1]: 'mailto:maria@gmail.com'.lstrip('mailto') Out[1]: ':maria@gmail.com' In [2]: 'mailto:maria@gmail.com'.lstrip('mailto:') Out[2]: 'ria@gmail.com' In [3]: 'mailto:maria@gmail.com'.lstrip('ailto:') Out[3]: 'mailto:maria@gmail.com'
https://docs.python.org/3.8/library/stdtypes.html?highlight=lstrip#str.lstrip > Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix; rather, all combinations of its values are stripped: The last sentence talks about the report. In the given examples it strips all the given characters in chars from left until it finds a character that is not found as part of the given chars argument. In [2]: 'mailto:maria@gmail.com'.lstrip('mailto:') # Stops at 'r' that doesn't need to be stripped Out[2]: 'ria@gmail.com' In [3]: 'mailto:maria@gmail.com'.lstrip('ailto:') # 'm' is the first character and is not found in chars 'ailto:' Out[3]: 'mailto:maria@gmail.com' Changing this would break a lot of old code and adding an API for two different behaviors would require a larger discussion. Perhaps did you find any part of docs that you would like to improve to clarify this better?
Generally, we don't make changes that would break existing code relying on the documented and tested behavior. If you would like to propose a new method, the python-ideas mailing list would be a good place to start. >>> s[len('mailto:'):] if s.startswith('mailto:') else s 'maria@gmail.com'
History
Date
User
Action
Args
2022-04-11 14:59:12
admin
set
github: 80591
2019-03-23 21:14:36
rhettinger
set
status: open -> closedtype: behavior -> enhancementversions: - Python 2.7, Python 3.7nosy: + rhettingermessages: + resolution: not a bugstage: resolved