Come taglio gli spazi bianchi da una stringa?


1157

Come rimuovo gli spazi bianchi iniziali e finali da una stringa in Python?

Per esempio:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

17
Questa domanda mi ha appena fatto parlare con i colleghi del lavoro sullo stripping per 3 minuti. A chiunque si unisse a metà strada avrebbero pensato che stessimo tutti lavorando un po 'di notte.
Whitecat,

Risposte:


1736

Solo uno spazio o tutti gli spazi consecutivi? Se il secondo, le stringhe hanno già un .strip()metodo:

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '   Hello   '.strip()  # ALL consecutive spaces at both ends removed
'Hello'

Se è necessario solo rimuovere uno spazio, tuttavia, è possibile farlo con:

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

Inoltre, tieni presente che str.strip()rimuove anche altri caratteri di spazi bianchi (ad esempio schede e nuove righe). Per rimuovere solo gli spazi, è possibile specificare il carattere da rimuovere come argomento strip, ovvero:

>>> "  Hello\n".strip(" ")
'Hello\n'

19
Se hai bisogno della funzione strip, ad esempio una funzione map, puoi accedervi tramite str.strip (), in questo modo map (str.strip, collection_of_s)
Ward

1
C'è un modo per tagliare solo gli spazi bianchi alle estremità?
Nikhil Girraj,

2
@killthrush Grazie per il riferimento, ma penso che tu intendessi la rstrip()funzione. :-)
Nikhil Girraj,

14
A volte mi sembra che Python eviti di proposito i nomi ben accettati e significativi che la stragrande maggioranza delle lingue usa per essere "unici" e "diversi" - stripinvece di trim, isinstanceinvece di instanceof, listinvece di array, ecc. Ecc. Perché non usare semplicemente i nomi con cui tutti hanno familiarità ?? Accidenti: P
Gershom,

3
Nel stripcaso di @GershomMaes , sono completamente d'accordo, ma un elenco è completamente diverso da un array.
JFA

262

Come sottolineato nelle risposte sopra

myString.strip()

rimuoverà tutti gli spazi bianchi iniziali e finali come \ n, \ r, \ t, \ f, spazio.

Per una maggiore flessibilità, utilizzare quanto segue

  • Rimuove solo i caratteri principali degli spazi bianchi:myString.lstrip()
  • Rimuove solo i caratteri finali degli spazi bianchi:myString.rstrip()
  • Rimuove i caratteri specifici degli spazi bianchi: myString.strip('\n')o myString.lstrip('\n\r')o myString.rstrip('\n\t')così via.

Maggiori dettagli sono disponibili nei documenti


credo sia \ r \ n non \ n \ r ... (impossibile modificare il post - non sono stati modificati abbastanza caratteri)
StefanNch,

8
@StefanNch: l'ordine dei personaggi non ha alcuna importanza. \ n \ r rimuoverà anche \ r \ n.
Johannes Overmann,

122

strip non è limitato ai caratteri spazi bianchi:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

54

Ciò rimuoverà tutti gli spazi iniziali e finali in myString:

myString.strip()

3
Questo post ha solo un codice, non spiega cosa fa la funzione. Rimuove gli spazi iniziali o finali o entrambi? Rimuove solo gli spazi o ogni tipo di spazio bianco? Puoi farlo rimuovere solo gli spazi allora, o c'è un'altra funzione per farlo? Se rimuove spazi vuoti sia iniziali che finali, puoi farlo rimuovere solo uno dei due, o c'è / c'è (un'altra) funzione (e) per fare il lavoro? myString.strip()non risponde a nessuna delle domande che ho dichiarato.
EKons,

8
Per essere onesti, OP ha specificamente richiesto un metodo che rimuove gli spazi bianchi iniziali e finali da una stringa. Risposta abbastanza buona per me
Denis Lins,

21

Vuoi strip ():

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

0

Volevo rimuovere troppi spazi in una stringa (anche tra la stringa, non solo all'inizio o alla fine). L'ho fatto, perché non so come farlo altrimenti:

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
    else:
       ready = True
print(string)

Questo sostituisce i doppi spazi in uno spazio fino a quando non si hanno più doppi spazi


Anche se questo funziona, non è molto efficiente, utilizzare questo invece: stackoverflow.com/a/2077906/1240286
Arklur

0

Non sono riuscito a trovare una soluzione a quello che cercavo, quindi ho creato alcune funzioni personalizzate. Puoi provarli.

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)


def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss


def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))


def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(chars).lower()


def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(reversed(chars)).lower()


s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

0

Se si desidera tagliare il numero specificato di spazi da sinistra e destra , è possibile effettuare ciò:

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

0

Questo può essere fatto anche con un'espressione regolare

import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'

0

Come rimuovo gli spazi bianchi iniziali e finali da una stringa in Python?

Quindi la soluzione seguente rimuoverà gli spazi bianchi iniziali e finali e anche gli spazi bianchi intermedi. Come se fosse necessario ottenere valori di stringa chiari senza più spazi bianchi.

>>> str_1 = '     Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>>
>>>
>>> str_2 = '     Hello      World'
>>> print(' '.join(str_2.split()))
Hello World
>>>
>>>
>>> str_3 = 'Hello World     '
>>> print(' '.join(str_3.split()))
Hello World
>>>
>>>
>>> str_4 = 'Hello      World     '
>>> print(' '.join(str_4.split()))
Hello World
>>>
>>>
>>> str_5 = '     Hello World     '
>>> print(' '.join(str_5.split()))
Hello World
>>>
>>>
>>> str_6 = '     Hello      World     '
>>> print(' '.join(str_6.split()))
Hello World
>>>
>>>
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World

Come puoi vedere, questo rimuoverà tutti gli spazi bianchi multipli nella stringa (l'output è Hello Worldper tutti). La posizione non ha importanza. Ma se hai davvero bisogno di spazi bianchi iniziali e finali, allora strip()sarebbe trovare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.