How do I remove a substring from the end of a string?
Solution 1:
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)
Solution 2:
If you are sure that the string only appears at the end, then the simplest way would be to use 'replace':
url = 'abcdc.com'
print(url.replace('.com',''))
Solution 3:
def strip_end(text, suffix):
if suffix and text.endswith(suffix):
return text[:-len(suffix)]
return text
Solution 4:
Since it seems like nobody has pointed this on out yet:
url = "www.example.com"
new_url = url[:url.rfind(".")]
This should be more efficient than the methods using split()
as no new list object is created, and this solution works for strings with several dots.
Solution 5:
Depends on what you know about your url and exactly what you're tryinh to do. If you know that it will always end in '.com' (or '.net' or '.org') then
url=url[:-4]
is the quickest solution. If it's a more general URLs then you're probably better of looking into the urlparse library that comes with python.
If you on the other hand you simply want to remove everything after the final '.' in a string then
url.rsplit('.',1)[0]
will work. Or if you want just want everything up to the first '.' then try
url.split('.',1)[0]