Programing

파이썬에서 문자열 끝에서 부분 문자열을 어떻게 제거합니까?

lottogame 2020. 3. 7. 00:16
반응형

파이썬에서 문자열 끝에서 부분 문자열을 어떻게 제거합니까?


다음 코드가 있습니다.

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

기대했다: abcdc

나는 얻었다 : abcd

지금은

url.rsplit('.com', 1)

더 좋은 방법이 있습니까?


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)

문자열이 끝에 만 나타나는 것이 확실한 경우 가장 간단한 방법은 '바꾸기'를 사용하는 것입니다.

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

def strip_end(text, suffix):
    if not text.endswith(suffix):
        return text
    return text[:len(text)-len(suffix)]

아무도 이것을 지적하지 않은 것처럼 보이기 때문에 :

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

이것은 split()새로운리스트 객체가 생성되지 않을 때 사용하는 방법보다 효율적이어야하며 ,이 솔루션은 여러 개의 점이있는 문자열에서 작동합니다.


URL에 대해 알고있는 것과 정확히 무엇을 시도하는지에 따라 다릅니다. 항상 '.com'(또는 '.net'또는 '.org')으로 끝나는 것을 알고 있다면

 url=url[:-4]

가장 빠른 솔루션입니다. 좀 더 일반적인 URL이라면 파이썬과 함께 제공되는 urlparse 라이브러리를 살펴 보는 것이 좋습니다.

반면에 마지막 '.'이후에 모든 것을 제거하고 싶을뿐입니다. 그런 다음 끈으로

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

작동합니다. 또는 첫 번째 '.'까지 모든 것을 원한다면 다음 시도

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

한 줄로 :

text if not text.endswith(suffix) or len(suffix) == 0 else text[:-len(suffix)]

그것이 확장이라는 것을 알고 있다면

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

이것은와 동일하게 작동 abcdc.com하거나 www.abcdc.com또는 abcdc.[anything]더 확장이다.


어때요 url[:-4]?


주어진 예제에서 주제의 일부인 것처럼 보이는 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"또는 특정 항목 만 분리해야하는 경우이 기능 과 결합 할 수도 있습니다 .


url.rsplit ( '. com', 1)

옳지 않습니다.

실제로 작성해야 할 것은

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

그리고 그것은 간결한 IMHO처럼 보입니다.

그러나 개인 선호도는 하나의 매개 변수 만 사용하기 때문에이 옵션입니다.

url.rpartition('.com')[0]

import re

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

이 답변을 가장 표현하는 방법으로 반복하고 싶습니다. 물론 다음은 CPU 시간이 덜 걸립니다.

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

그러나 CPU가 병목이라면 왜 파이썬으로 작성합니까?

어쨌든 CPU는 병목입니까? 아마 운전사에서.

정규식 사용의 장점은 코드 재사용 성입니다. 다음에 3 개의 문자 만있는 '.me'를 제거하려면 어떻게해야합니까?

동일한 코드가 트릭을 수행합니다.

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

이것은 정규 표현식에 완벽하게 사용됩니다.

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

또는 split을 사용할 수 있습니다.

a = 'abccomputer.com'
res = a.split('.com',1)[0]

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

제 경우에는 예외를 제기해야했습니다.

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)]

확장 만 제거하려는 경우

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

파일 이름에 존재하는 다른 점들과 함께 모든 확장에서 작동합니다. 단순히 문자열을 분할하여 점을 나열하고 마지막 요소없이 결합합니다.

아마도 가장 빠르지는 않지만 다른 방법보다 더 읽기 쉽습니다.

참고 URL : https://stackoverflow.com/questions/1038824/how-do-i-remove-a-substring-from-the-end-of-a-string-in-python



반응형