파이썬에서 문자열 끝에서 부분 문자열을 어떻게 제거합니까?
다음 코드가 있습니다.
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]))
파일 이름에 존재하는 다른 점들과 함께 모든 확장에서 작동합니다. 단순히 문자열을 분할하여 점을 나열하고 마지막 요소없이 결합합니다.
아마도 가장 빠르지는 않지만 다른 방법보다 더 읽기 쉽습니다.
'Programing' 카테고리의 다른 글
다른 지점으로 커밋 푸시 (0) | 2020.03.07 |
---|---|
왜 jquery의 .ajax () 메소드가 세션 쿠키를 보내지 않습니까? (0) | 2020.03.07 |
Date.parse가 왜 잘못된 결과를 줍니까? (0) | 2020.03.06 |
파이썬 : '사전'이 비어 있는지 확인하면 작동하지 않는 것 같습니다. (0) | 2020.03.06 |
Less in Unix를 사용하여 특정 줄 번호로 이동 (0) | 2020.03.06 |