Вопрос-Ответ

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

Как мне удалить подстроку из конца строки (удалить суффикс строки)?

У меня есть следующий код:

url = 'abcdc.com'
print(url.strip('.com'))

Я ожидал: abcdc

Я получил: abcd

Теперь я делаю

url.rsplit('.com', 1)

Есть ли способ лучше?


Смотрите Как работают строковые методы .strip / .rstrip / .lstrip в Python? для конкретного объяснения того, что делает первая попытка.

Переведено автоматически
Ответ 1

strip не означает "удалить эту подстроку". x.strip(y) обрабатывает y как набор символов и удаляет любые символы из этого набора с обоих концов x.

На Python 3.9 и новее вы можете использовать методы removeprefix и removesuffix для удаления целой подстроки с любой стороны строки:

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

Соответствующее предложение по улучшению Python - PEP-616.

На Python 3.8 и старше вы можете использовать endswith и нарезку:

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

Или регулярное выражение:

import re
url = 'abcdc.com'
url = re.sub('\.com$', '', url)
Ответ 2

Если вы уверены, что строка отображается только в конце, то самым простым способом было бы использовать 'replace':

url = 'abcdc.com'
print(url.replace('.com',''))
Ответ 3
def strip_end(text, suffix):
if suffix and text.endswith(suffix):
return text[:-len(suffix)]
return text
Ответ 4

Поскольку кажется, что никто еще не указал на это:

url = "www.example.com"
new_url = url[:url.rfind(".")]

Это должно быть эффективнее, чем методы, использующие split() поскольку новый объект list не создается, и это решение работает для строк с несколькими точками.

python string