How do I remove a substring from the end of a string (remove a suffix of the string)?

python, string

Solution

`strip` doesn't mean "remove this substring". `x.strip(y)` treats `y` as a set of characters and strips any characters in that set from both ends of `x`.

On Python 3.9 and newer you can use the `removeprefix` and `removesuffix` methods to remove an entire substring from either side of the string:

url = 'abcdc.com'
url.removesuffix('.com')    # Returns 'abcdc'
url.removeprefix('abcdc.')  # Returns 'com'

The relevant Python Enhancement Proposal is PEP-616.

On Python 3.8 and older you can use `endswith` and slicing:

url = 'abcdc.com'
if url.endswith('.com'):
    url = url[:-4]

Or a regular expression:

import re
url = 'abcdc.com'
url = re.sub('\.com$', '', url)

Problem

I have the following code: ``` url = 'abcdc.com' print(url.strip('.com')) ``` I expected: `abcdc` I got: `abcd` Now I do ``` url.rsplit('.com', 1) ``` Is there a better way? See How do the .strip/.rstrip/.lstrip string methods work in Python? for a specific explanation of what the first attempt is doing.

Original source

Related problems