Jak usunąć wiodące spacje w Pythonie?

181

Mam ciąg tekstowy zaczynający się od liczby spacji, mieszczący się w przedziale od 2 do 4.

Jaki jest najprostszy sposób na usunięcie wiodących białych znaków? (tj. usunąć wszystko przed określonym znakiem?)

"  Example"   -> "Example"
"  Example  " -> "Example  "
"    Example" -> "Example"
James Wanchai
źródło

Odpowiedzi:

319

lstrip()Metoda usunie wiodącym spacje, znak nowej linii i znaków tabulacji na początku łańcucha:

>>> '     hello world!'.lstrip()
'hello world!'

Edytować

Jak wskazał balpha w komentarzach , aby usunąć tylko spacje z początku ciągu, lstrip(' ')należy użyć:

>>> '   hello world with 2 spaces and a tab!'.lstrip(' ')
'\thello world with 2 spaces and a tab!'

Powiązane pytanie:

coobird
źródło
10
Zwróć jednak uwagę, że lstrip usuwa wiodące białe spacje, które mogą być większe niż spacje (tabulatory itp.). Zwykle tego chcesz. Jeśli chcesz usunąć tylko spacje i spacje, zadzwoń do „bla” .lstrip („”)
balpha
1
@balpha: Dzięki za zwrócenie uwagi! Dodałem to do odpowiedzi.
coobird
3
programuje od lat i nie wiedział o tym, ratownik
Chris Hawkes
3
Dla nowych programistów Pythona może być przydatne, aby zauważyć, że ciągi znaków w pythonie są niezmienne, więc jeśli pracujesz z ciągiem „string_a”, możesz pomyśleć, że string_a.lstrip () zmieni sam ciąg, ale w rzeczywistości trzeba przypisać wartość string_a.lstrip () do siebie lub nowej zmiennej, np. „string_a = string_a.lstrip ()”.
Fields
2
uwaga: ponieważ istnieje lstrip (), jest również strip () i rstrip ()
Alexander Stohr
87

Funkcja stripusunie białe znaki z początku i końca łańcucha.

my_str = "   text "
my_str = my_str.strip()

zostanie ustawiony my_strna "text".

Marquis Wang
źródło
18

Jeśli chcesz wyciąć spacje przed i za słowem, ale zachowaj środkowe.
Możesz użyć:

word = '  Hello World  '
stripped = word.strip()
print(stripped)
Tenzin
źródło
Warto zauważyć, że to nie drukuj 'Hello World'ze środkowej przestrzeni nienaruszonego, aby ktokolwiek zastanawiając się, myślę, że został wybrany w dół, ponieważ oryginalne pytanie zostało specjalnie z prośbą o usunięcie wiodące spacje.
conapart3
2
docs.python.org/3/whatsnew/3.0.html Funkcja Drukuj jest funkcją Instrukcja print została zastąpiona funkcją print (), z argumentami słów kluczowych zastępującymi większość specjalnej składni starej instrukcji print (PEP 3105).
mbrandeis
@mbrandeis Jakie znaczenie ma to stwierdzenie?
MilkyWay90
12

Aby usunąć wszystko przed określonym znakiem, użyj wyrażenia regularnego:

re.sub(r'^[^a]*', '')

aby usunąć wszystko aż do pierwszego „a”. [^a]można zastąpić dowolną klasą znaków, na przykład znakami słów.

cjs
źródło
3
Myślę, że facet zapytał o „najłatwiejszy i najprostszy sposób”
Nie,
10
To prawda, ale poprosił również (być może nieumyślnie) o rozwiązanie bardziej ogólnego problemu, „tj. Usunąć wszystko przed określoną postacią?” I to jest to bardziej ogólne rozwiązanie.
cjs
1

Pytanie nie dotyczy ciągów wielowierszowych, ale oto jak usunąć wiodące białe znaki z ciągu wielowierszowego przy użyciu modułu textwrap biblioteki standardowej Pythona . Gdybyśmy mieli ciąg taki jak:

s = """
    line 1 has 4 leading spaces
    line 2 has 4 leading spaces
    line 3 has 4 leading spaces
"""

jeśli print(s)otrzymamy dane wyjściowe takie jak:

>>> print(s)
    this has 4 leading spaces 1
    this has 4 leading spaces 2
    this has 4 leading spaces 3

a jeśli użyliśmy textwrap.dedent:

>>> import textwrap
>>> print(textwrap.dedent(s))
this has 4 leading spaces 1
this has 4 leading spaces 2
this has 4 leading spaces 3
Jaymon
źródło