Próbuję usunąć ostatnie 3 znaki z ciągu w pythonie, nie wiem, jakie to znaki, więc nie mogę ich użyć rstrip
, muszę też usunąć wszelkie spacje i przekonwertować je na duże
przykładem może być:
foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()
To działa i daje mi BS12, czego chcę, jednak jeśli ostatnie 4 i 3 znaki są takie same, tracę oba, np. Jeśli foo = "BS11 1AA"
po prostu dostaję'BS'
przykładami foo
mogą być:
BS1 1AB
bs11ab
BS111ab
Ciąg może mieć 6 lub 7 znaków i muszę porzucić ostatnie 3 (zakładając brak spacji)
Jakieś wskazówki?
''.join(foo.split())
jest to lepsze niżfoo.replace(' ', '')
, gdy jest używane na łańcuchach Unicode, ponieważ usuwa wszelkie białe znaki, oprócz' '
znaku (w szczególności, spacje nierozdzielające są również usuwane). To powiedziawszyreplace()
jest prawdopodobnie znacznie szybsze, więc można go użyć, jeśli, powiedzmy, ciągi wejściowe są zakodowane w ASCII, który ma tylko jeden znak spacji (używam tutaj terminologii Python 2).Nie działa zgodnie z oczekiwaniami, ponieważ pasek jest oparty na postaci. Zamiast tego musisz to zrobić:
źródło
źródło
Mogłeś nieznacznie źle zrozumieć rstrip, usuwa on nie ciąg, ale dowolny znak w określonym ciągu.
Lubię to:
Zamiast tego po prostu użyj
(po zastąpieniu białych znaków niczym)
źródło
źródło
Staram się unikać wyrażeń regularnych, ale wydaje się, że to działa:
string = re.sub("\s","",(string.lower()))[:-3]
źródło
Co w tym złego?
źródło
split
slice
concentrate
To dobry trening dla początkujących i łatwy do osiągnięcia.
Inną zaawansowaną metodą jest taka funkcja:
W przypadku tego pytania po prostu chcesz usunąć ostatnie znaki, więc możesz pisać w ten sposób:
Myślę, że przestałeś przejmować się tymi trzema postaciami, więc przegrałeś. Chcesz tylko usunąć ostatnie trzy, nieważne kim są!
Jeśli chcesz usunąć określone znaki, możesz dodać kilka, jeśli orzeczenia:
źródło
Czy nie wykonujesz operacji w złej kolejności? Wydaje się, że masz takie wymagania
foo[:-3].replace(" ", "").upper()
źródło
To zależy od twojej definicji białych znaków. Ogólnie rzecz biorąc, białe znaki nazwałbym spacjami, tabulatorami, znakami końca wiersza i powrotem karetki. Jeśli to jest twoja definicja, chcesz użyć wyrażenia regularnego z \ s do zastąpienia wszystkich białych znaków:
źródło