Python Видалити останні 3 символи рядка


146

Я намагаюся видалити останні три символи з рядка в python, я не знаю, що це за символи, тому я не можу використовувати 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 (якщо при цьому немає пробілу)

Якісь поради?

Відповіді:


278

Видалення будь-якого простору:

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

Видалення останніх трьох символів:

foo = foo[:-3]

Переклад на великі літери:

foo = foo.upper()

Весь цей код в одному рядку:

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

9
Я хотів би зазначити, що ''.join(foo.split())краще, ніж foo.replace(' ', '')при використанні на рядках unicode, оскільки він видаляє будь-який символ пробілу , крім ' 'символу (зокрема, видаляються також нерозривні пробіли). Це replace(), мабуть, набагато швидше, тому його можна використовувати, якщо, скажімо, вхідні рядки, як відомо, кодуються в ASCII, який має лише один пробільний символ (тут я використовую термінологію Python 2)
Ерік О Лебігот

90

Це не працює, як ви очікували, тому що смужка заснована на символах. Вам потрібно зробити це замість цього:

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

11
Це не знімає WHITESPACE, як вимагає ОП; він видаляє лише SPACE символи.
Джон Махін

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

2
@Lidia Так, смужка видаляє лише пробіли з початку та в кінці рядка.
Eliezer Miron

Слід зазначити, що ви не можете це застосувати, наприклад, foo [3:] foo [: - 3]
crafter

9

Можливо, ви неправильно зрозуміли rstrip, він знімає не рядок, а будь-який символ у вказаній рядку.

Подобається це:

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

Тому замість цього просто використовуйте

text = text[:-3] 

(після заміни пробілів нічим)



3

Я намагаюся уникати регулярних виразів, але це, здається, працює:

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


1
string.lower () має бути string.upper (). Моя помилка.
krs1

це єдине рішення, яке добре стосується пробілів
Ерік Аронесті


1
  1. split
  2. slice
  3. concentrate

Це гарне тренування для початківців, і це легко досягти.

Ще один вдосконалений метод - така функція:

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

І для цього питання ви просто хочете видалити останні символи, щоб ви могли написати так:

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

Я думаю, що ти переймаєшся тим, що ці три персонажі, тож ти загубився. Ви просто хочете видалити останні три, все-таки хто вони!

Якщо ви хочете видалити деякі конкретні символи, ви можете додати деякі, якщо судження:

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

0

Ви не виконуєте операції в неправильному порядку? Ви, мабуть, вимога єfoo[:-3].replace(" ", "").upper()


балів у наступному запитанні >>> (припускаючи відсутність пробілу)
Noctis Skytower

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")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.