It seems to me that the desired behavior is closest to 'str.replace()' out of all the options, just with the constraint of being limited to either the start or the end of the string. (Thus the .lreplace() and .rreplace() option suggested by Glenn earlier in the thread.)
The minimal change (which actually also seems pretty general) seems to me to be adding only_start and only_end keyword arguments to str.replace(), both defaulting to False. If, e.g., only_start is passed True, each repetition of old at the start of str is replaced by a copy of new, with the number of replacements limited by the existing optional count. Similar behavior for only_end=True. Probably best to raise a ValueError(?) if both only_start=True and only_end=True?
Taking swapping a file extension as an example of a particular transformation of interest, it would be achieved with something like s.replace(".htm", ".html", only_end=True).
Date: Tue, 2 Jul 2019 14:33:57 +1000 From: Chris Angelico email@example.com Subject: [Python-Dev] Re: strip behavior provides inconsistent results with certain strings To: python-dev firstname.lastname@example.org Message-ID: CAPTjJmqFsWof= x64_vDYm9jaJ0z9N19Te7DK+naVvoXOih7SJQ@mail.gmail.com Content-Type: text/plain; charset="UTF-8"
On Tue, Jul 2, 2019 at 2:28 PM Glenn Linderman email@example.com wrote: >
A method could raise instead of returning the string as-is if the prefix is not really a prefix. How often is this needed? The most common end deletions are whitespace, which the current .strip handles correctly.
raising wouldn't be helpful in most of the situations where I use this logic... it would require a more complex flow control than the if startswith path in the current situation.
Yes, I use strip more frequently, but if startswith: chop_prefix operation (and the other end too) happens an awful lot.
If the method accepts a tuple of prefixes and will remove the first one found (or the longest, or whatever) and raises if none found, you could get the "chop only if present" behaviour by including an empty string as one of the possible prefixes.