Как мне удалить подстроку из конца строки в Python? - PullRequest
303 голосов
/ 24 июня 2009

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

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

Я ожидал: abcdc

Я получил: abcd

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

url.rsplit('.com', 1)

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

Ответы [ 16 ]

457 голосов
/ 24 июня 2009

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

Вместо этого вы можете использовать endswith и нарезку:

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

Или используя регулярные выражения:

import re
url = 'abcdc.com'
url = re.sub('\.com$', '', url)
68 голосов
/ 06 марта 2010

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

url = 'abcdc.com'
print(url.replace('.com',''))
37 голосов
/ 24 июня 2009
def strip_end(text, suffix):
    if not text.endswith(suffix):
        return text
    return text[:len(text)-len(suffix)]
35 голосов
/ 04 августа 2014

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

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

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

22 голосов
/ 24 июня 2009

Зависит от того, что вы знаете о своем URL и что именно вы пытаетесь сделать. Если вы знаете, что он всегда будет заканчиваться на «.com» (или «.net» или «.org»), тогда

 url=url[:-4]

- самое быстрое решение. Если это более общие URL-адреса, то вам, вероятно, лучше заглянуть в библиотеку urlparse, которая поставляется с python.

Если вы, с другой стороны, просто хотите удалить все после финального '.' в строке тогда

url.rsplit('.',1)[0]

будет работать. Или, если вы хотите, просто хотите, чтобы все до первого ». тогда попробуйте

url.split('.',1)[0]
10 голосов
/ 29 октября 2012

В одну строку:

text if not text.endswith(suffix) or len(suffix) == 0 else text[:-len(suffix)]
8 голосов
/ 24 июня 2009

Если вы знаете, что это расширение, то

url = 'abcdc.com'
...
url.rsplit('.', 1)[0]  # split at '.', starting from the right, maximum 1 split

Это одинаково хорошо работает с abcdc.com или www.abcdc.com или abcdc.[anything] и является более расширяемым.

8 голосов
/ 24 июня 2009

Как насчет url[:-4]?

6 голосов
/ 07 мая 2013

Для URL-адресов (поскольку в данном примере это является частью темы), можно сделать что-то вроде этого:

import os
url = 'http://www.stackoverflow.com'
name,ext = os.path.splitext(url)
print (name, ext)

#Or:
ext = '.'+url.split('.')[-1]
name = url[:-len(ext)]
print (name, ext)

Оба будут выводить: ('http://www.stackoverflow', '.com')

Это также можно комбинировать с str.endswith(suffix), если вам нужно просто разделить ".com" или что-то конкретное.

2 голосов
/ 13 июля 2017

url.rsplit ('. Com', 1)

не совсем верно.

На самом деле вам нужно написать:

url.rsplit('.com', 1)[0]

, и выглядит ИМХО довольно лаконично.

Однако лично я предпочитаю эту опцию, потому что она использует только один параметр:

url.rpartition('.com')[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...