Comment découper les espaces d'une chaîne?

1158

Comment supprimer les espaces blancs de début et de fin d'une chaîne en Python?

Par exemple:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Georgy
la source
17
Cette question m'a juste fait parler avec des collègues de travail sur le décapage pendant 3 minutes. Pour quiconque se joignant à mi-parcours, ils auraient pensé que nous travaillions tous un peu les emplois de nuit.
Whitecat

Réponses:

1738

Un seul espace ou tous les espaces consécutifs? Si le second, alors les chaînes ont déjà une .strip()méthode:

>>> ' 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'

Si vous n'avez besoin que de supprimer un espace, vous pouvez le faire avec:

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

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

Notez également que les str.strip()autres espaces sont également supprimés (par exemple, les tabulations et les retours à la ligne). Pour supprimer uniquement les espaces, vous pouvez spécifier le caractère à supprimer comme argument strip, c'est- à -dire:

>>> "  Hello\n".strip(" ")
'Hello\n'
Brian
la source
19
Si vous avez besoin de la fonction strip, par exemple une fonction map, vous pouvez y accéder via str.strip (), comme ainsi map (str.strip, collection_of_s)
Ward
1
Existe-t-il un moyen de ne couper que les espaces blancs aux extrémités?
Nikhil Girraj
2
@killthrush Merci pour la référence, mais je pense que vous vouliez dire la rstrip()fonction. :-)
Nikhil Girraj
14
Parfois, j'ai l'impression que python évite délibérément les noms bien acceptés et significatifs que la grande majorité des langues utilisent pour être "uniques" et "différents" - stripau lieu de trim, isinstanceau lieu de instanceof, listau lieu de array, etc., etc. Pourquoi ne pas simplement utiliser les noms que tout le monde connaît ?? geez: P
Gershom
3
@GershomMaes dans striple cas de, je suis complètement d'accord, mais une liste est complètement différente d'un tableau.
JFA
262

Comme indiqué dans les réponses ci-dessus

myString.strip()

supprimera tous les espaces blancs de début et de fin tels que \ n, \ r, \ t, \ f, espace.

Pour plus de flexibilité, utilisez ce qui suit

  • Supprime uniquement les caractères d'espacement principaux :myString.lstrip()
  • Supprime uniquement les caractères d'espacement de fin:myString.rstrip()
  • Supprime les caractères d'espaces spécifiques : myString.strip('\n')ou myString.lstrip('\n\r')ou myString.rstrip('\n\t')et ainsi de suite.

Plus de détails sont disponibles dans la documentation

Mudit Jain
la source
je crois que \ r \ n n'est pas \ n \ r ... (impossible de modifier le message - pas assez de caractères modifiés)
StefanNch
8
@StefanNch: L'ordre des personnages n'a pas d'importance du tout. \ n \ r supprimera également \ r \ n.
Johannes Overmann,
122

strip n'est pas limité aux caractères d'espaces non plus:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')
Drew Noakes
la source
54

Cela supprimera tous les espaces de début et de fin dans myString:

myString.strip()
Deniz Dogan
la source
3
Ce message n'a que du code, il n'explique pas ce que fait la fonction. Supprime-t-il les espaces de début ou de fin, ou les deux? Supprime-t-il uniquement les espaces ou tous les types d'espaces? Pouvez-vous alors lui faire supprimer uniquement les espaces, ou existe-t-il une autre fonction pour le faire? S'il supprime à la fois les espaces de début et de fin, pouvez-vous le faire supprimer uniquement l'une des deux, ou existe-t-il (ou) une ou plusieurs autres fonctions pour faire le travail? myString.strip()ne répond à aucune des questions que j'ai posées.
EKons
8
Pour être juste, OP a spécifiquement demandé une méthode qui supprime les espaces de début et de fin d'une chaîne. Bonne réponse pour moi
Denis Lins
21

Vous voulez strip ():

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

for phrase in myphrases:
    print phrase.strip()
vezult
la source
0

Je voulais supprimer les espaces trop nombreux dans une chaîne (également entre la chaîne, pas seulement au début ou à la fin). J'ai fait ça, parce que je ne sais pas comment faire autrement:

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)

Cela remplace les espaces doubles dans un espace jusqu'à ce que vous n'ayez plus d'espace double

Marjan
la source
Bien que cela fonctionne, ce n'est pas très efficace, utilisez-le à la place: stackoverflow.com/a/2077906/1240286
Arklur
0

Je n'ai pas trouvé de solution à ce que je cherchais, j'ai donc créé des fonctions personnalisées. Vous pouvez les essayer.

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)))
Mitch
la source
0

Si vous souhaitez couper le nombre spécifié d'espaces de gauche à droite , vous pouvez le faire:

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"
Dounchan
la source
0

Cela peut également être fait avec une expression régulière

import re

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

Comment supprimer les espaces blancs de début et de fin d'une chaîne en Python?

La solution ci-dessous supprimera donc les espaces blancs avant et arrière ainsi que les espaces blancs intermédiaires. Comme si vous avez besoin d'obtenir des valeurs de chaîne claires sans plusieurs espaces blancs.

>>> 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

Comme vous pouvez le voir, cela supprimera tous les espaces blancs multiples de la chaîne (la sortie est Hello Worldpour tous). L'emplacement n'a pas d'importance. Mais si vous avez vraiment besoin d'espaces blancs de début et de fin, alors ce strip()serait trouvé.

Kushan Gunasekera
la source