Как мне удалить подстроку из конца строки (удалить суффикс строки)?
У меня есть следующий код:
url = 'abcdc.com'print(url.strip('.com'))
Я ожидал: abcdc
abcdc
Я получил: abcd
abcd
Теперь я делаю
url.rsplit('.com', 1)
Есть ли способ лучше?
Смотрите Как работают строковые методы .strip / .rstrip / .lstrip в Python? для конкретного объяснения того, что делает первая попытка.
Переведено автоматически
Ответ 1
strip не означает "удалить эту подстроку". x.strip(y) обрабатывает y как набор символов и удаляет любые символы из этого набора с обоих концов x.
strip
x.strip(y)
y
x
На Python 3.9 и новее вы можете использовать методы removeprefix и removesuffix для удаления целой подстроки с любой стороны строки:
removeprefix
removesuffix
url = 'abcdc.com'url.removesuffix('.com') # Returns 'abcdc'url.removeprefix('abcdc.') # Returns 'com'
Соответствующее предложение по улучшению Python - PEP-616.
На Python 3.8 и старше вы можете использовать endswith и нарезку:
endswith
url = 'abcdc.com'if url.endswith('.com'): url = url[:-4]
Или регулярное выражение:
import reurl = '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 не создается, и это решение работает для строк с несколькими точками.
split()