파이썬 문자열의 마지막 3자를 제거


146

파이썬에서 문자열에서 마지막 3자를 제거하려고 하는데이 문자가 무엇인지 알 수 없으므로 rstrip공백을 제거하고 대문자로 변환해야합니다.

예를 들면 다음과 같습니다.

foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()

이 작품은 지난 4 & 3 캐릭터가 있다면 모두 예를 풀어 동일하지만, 내가 원하는 어느 날 BS12을 제공 foo = "BS11 1AA"난 그냥 얻을'BS'

예를 들면 다음과 foo같습니다.

BS1 1AB
bs11ab
BS111ab

문자열은 6 ~ 7 자일 수 있으며 마지막 3을 삭제해야합니다 (공백이 없다고 가정).

팁이 있습니까?

답변:


278

공백을 모두 제거하십시오.

foo = ''.join(foo.split())

마지막 세 문자 제거 :

foo = foo[:-3]

대문자로 변환 :

foo = foo.upper()

한 줄에 모든 코드가 있습니다.

foo = ''.join(foo.split())[:-3].upper()

9
나는 참고로하고 싶은 ''.join(foo.split())것보다 더 낫다 foo.replace(' ', '')는 어떤 제거하기 때문에 유니 코드 문자열을 사용하는 경우, 공백을 받는 사람뿐만 아니라, 문자를 ' '문자 (특히, 비 깨는 공간도 제거됩니다). 즉 replace(), 입력 문자열이 ASCII로 인코딩되어 공백 문자가 하나만있는 ASCII로 인코딩 된 경우 사용할 수 있습니다 (여기서는 Python 2 용어를 사용하고 있습니다)
Eric O Lebigot

90

strip은 문자 기반이기 때문에 예상대로 작동하지 않습니다. 대신이 작업을 수행해야합니다.

foo = foo.replace(' ', '')[:-3].upper()

11
OP가 요청 한대로 WHITESPACE를 제거하지는 않습니다. SPACE 문자 만 제거합니다.
John Machin

15
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'

2
@Lidia 예, strip은 문자열의 시작과 끝에서 공백 만 제거합니다.
Eliezer Miron

예를 들어 foo [3 :] foo [:-3]
crafter

9

rstrip을 약간 잘못 이해했을 수 있습니다. 문자열이 아니라 지정한 문자열의 모든 문자를 제거합니다.

이처럼 :

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

대신에

text = text[:-3] 

(공백을 아무것도없는 것으로 바꾼 후)


3
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

3

정규 표현식을 피하려고 시도하지만 작동하는 것 같습니다.

string = re.sub("\s","",(string.lower()))[:-3]


1
string.lower ()는 string.upper () 여야합니다. 내 실수.
krs1

이것은 공백을 잘 처리하는 유일한 솔루션입니다
Erik Aronesty


1
  1. split
  2. slice
  3. concentrate

이것은 초보자에게 좋은 운동이며 달성하기 쉽습니다.

또 다른 고급 방법은 다음과 같은 기능입니다.

def trim(s):
    return trim(s[slice])

그리고이 질문에 대해서는 마지막 문자를 제거하고 싶으므로 다음과 같이 쓸 수 있습니다.

def trim(s):
    return s[ : -3] 

나는 당신이 그 세 캐릭터가 무엇인지 걱정하기에 끝났다고 생각합니다. 그럼에도 불구하고 마지막 3 개를 제거하려고합니다.

특정 문자를 제거하려는 경우 if 판단을 추가 할 수 있습니다.

def trim(s):
    if [conditions]:   ### for some cases, I recommend using isinstance().
        return trim(s[slice])

0

잘못된 순서로 작업을 수행하지 않습니까? 당신의 요구 사항은foo[:-3].replace(" ", "").upper()


질문에서 다음을
가리킴

0

공백 정의에 따라 달라집니다. 나는 일반적으로 공백을 공백, 탭, 줄 바꿈 및 캐리지 리턴이라고 부릅니다. 이것이 정의라면 모든 공백 문자를 대체하기 위해 정규 표현식을 \ s로 사용하려고합니다.

import re

def myCleaner(foo):
    print 'dirty: ', foo
    foo = re.sub(r'\s', '', foo)
    foo = foo[:-3]
    foo = foo.upper()
    print 'clean:', foo
    print

myCleaner("BS1 1AB")
myCleaner("bs11ab")
myCleaner("BS111ab")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.