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

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

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

Я ожидал: abcdc

Я получил: abcd

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

url.rsplit('.com', 1)

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

Ответы [ 16 ]

1 голос
/ 27 марта 2017
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'
0 голосов
/ 13 июля 2017

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

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

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

Возможно, не самый быстрый, но для меня это более читабельно, чем другие методы.

0 голосов
/ 28 сентября 2016

В моем случае мне нужно было вызвать исключение, поэтому я сделал:

class UnableToStripEnd(Exception):
    """A Exception type to indicate that the suffix cannot be removed from the text."""

    @staticmethod
    def get_exception(text, suffix):
        return UnableToStripEnd("Could not find suffix ({0}) on text: {1}."
                                .format(suffix, text))


def strip_end(text, suffix):
    """Removes the end of a string. Otherwise fails."""
    if not text.endswith(suffix):
        raise UnableToStripEnd.get_exception(text, suffix)
    return text[:len(text)-len(suffix)]
0 голосов
/ 17 июля 2014
def remove_file_type(infile):
import re
return(re.sub('\.[^.]*$','',infile))
remove_file_type('abc.efg')'abc'
0 голосов
/ 07 декабря 2012

Или вы можете использовать сплит:

a = 'abccomputer.com'
res = a.split('.com',1)[0]
0 голосов
/ 24 июня 2009

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

>>> import re
>>> re.match(r"(.*)\.com", "hello.com").group(1)
'hello'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...