개발/Python

[파이썬] 문자열의 마지막 3개 문자 제거

MinorMan 2022. 12. 7. 20:35
반응형

<질문>

Python에서 문자열에서 마지막 3자를 제거하려고 합니다. 이 문자가 무엇인지 모르기 때문에 사용할 수 없습니다.rstrip, 또한 공백을 제거하고 대문자로 변환해야 합니다.

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

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

이것은 작동하고 나에게 준다"BS12"이것이 내가 원하는 것이지만 마지막 4번째와 3번째 문자가 같으면 둘 다 잃게 됩니다.foo = "BS11 1AA"난 그냥 얻을"BS".

의 예foo다음과 같을 수 있습니다.

BS1 1AB
bs11ab
BS111ab

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


<답변1>

모든 공백 제거:

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

마지막 세 문자 제거:

foo = foo[:-3]

대문자로 변환:

foo = foo.upper()

한 줄에 있는 모든 코드:

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

<답변2>

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

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

<답변3>

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

<답변4>

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

이와 같이:

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

대신에

text = text[:-3] 

(공백을 아무것도 교체하지 않은 후)


<답변5>

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

<답변6>

나는 정규 표현식을 피하려고 노력하지만 이것이 작동하는 것 같습니다.

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


<답변7>

  1. split
  2. slice
  3. concentrate

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

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

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

그리고 이 질문의 경우 마지막 문자만 제거하고 싶으므로 다음과 같이 작성할 수 있습니다.

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

나는 당신이 그 세 캐릭터가 무엇인지에 대해 걱정할 필요가 없다고 생각합니다. 그래서 당신은졌습니다. 그럼에도 불구하고 마지막 세 개를 제거하고 싶을 뿐입니다!

일부 특정 문자를 제거하려면 if 판단을 추가할 수 있습니다.

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

<답변8>

이게 무슨 문제야?

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

<답변9>

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


<답변10>

공백의 정의에 따라 다릅니다. 나는 일반적으로 공백을 공백, 탭, 줄 바꿈 및 캐리지 리턴이라고 부릅니다. 이것이 정의라면 모든 공백 문자를 바꾸기 위해 \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")
반응형