Как удалить подстроку из конца строки в Python?


Answers

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

url = 'abcdc.com'
print url.replace('.com','')
Question

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

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

Я ожидал: abcdc

Я получил: abcd

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

url.rsplit('.com', 1)

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




def remove_file_type(infile):
import re
return(re.sub('\.[^.]*$','',infile))
remove_file_type('abc.efg')'abc'



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

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

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




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

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

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

Оба выводят: ('http://www.', '.com')

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




Это идеальное использование для регулярных выражений:

>>> import re
>>> re.match(r"(.*)\.com", "hello.com").group(1)
'hello'



import re

def rm_suffix(url = 'abcdc.com', suffix='\.com'):
    return(re.sub(suffix+'$', '', url))

Я хочу повторить этот ответ как наиболее выразительный способ сделать это. Конечно, следующее меньше времени процессора

def rm_dotcom(url = 'abcdc.com'):
    return(url[:-4] if url.endswith('.com') else url)

Однако, если процессор - это горлышко бутылки, зачем писать в Python?

Когда в любом случае процессор? в драйверах, может быть.

Преимущества использования регулярного выражения - повторное использование кода. Что делать, если вы хотите удалить «.me», который имеет только три символа?

Тот же код сделает трюк.

>>> rm_sub('abcdc.me','.me')
'abcdc'



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




Если вы хотите удалить только расширение

url = 'abcdc.com'
print('.'.join(url.split('.')[:-1]))

Он работает с любым расширением, с потенциальными другими точками, существующими в имени файла. Он просто разбивает строку на список по точкам и соединяет ее без последнего элемента.

Наверное, не самый быстрый, но для меня это более читаемо, чем другие методы.