Удалить все пробелы в строке

Я хочу удалить все пробелы из строки с обоих концов и между словами.

У меня есть этот код Python:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

Но это удаляет только пробелы с обеих сторон строки. Как удалить все пробелы?


person co2f2e    schedule 25.11.2011    source источник
comment
Как должен выглядеть ваш результат? hello apple? helloapple?   -  person Mark Byers    schedule 25.11.2011
comment
@JoachimPileborg, не совсем так, потому что речь идет также о сокращении пробелов между словами.   -  person wal-o-mat    schedule 25.11.2011
comment
helloapple должен быть моим выходом   -  person co2f2e    schedule 11.02.2013
comment
Поправьте меня, если ошиблись, но пробелы не являются синонимами пробелов. Текущий ответ, помеченный как правильный, не удаляет все пробелы. Но, поскольку он отмечен как правильный, он должен был ответить на заданный вопрос? Значит, мы должны отредактировать вопрос, чтобы отразить принятый ответ? @Kalanamith Вы хотите удалить все пробелы или только пробелы?   -  person AnnanFay    schedule 06.12.2016


Ответы (11)


Если вы хотите удалить начальные и конечные пробелы, используйте str.strip():

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

Если вы хотите удалить все пробелы, используйте str.replace():

(NB, это удаляет только «нормальный» символ пробела ASCII ' ' U+0020, но не любой другой пробел )

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'

Если вы хотите удалить повторяющиеся пробелы, используйте str.split():

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'
person Cédric Julien    schedule 25.11.2011
comment
Великолепие этой функции в том, что она также удаляет '\ r \ n' из html-файла, который я получил от Beautiful Soup. - person lsheng; 26.05.2014
comment
Мне нравится .join (предложение.split ()), это удаляет все пробелы (пробелы, табуляции, новые строки) из любого места в предложении. - person don; 25.05.2016
comment
начинающий здесь. Может ли кто-нибудь объяснить мне, почему print (offer.join (offer.split ())) приводит к «привет, привет, яблоко»? Просто хочу понять, как здесь обрабатывается код. - person Yannis Dran; 22.11.2016
comment
@YannisDran проверьте документацию по str.join (), когда вы вызываете sentence.join(str_list), вы просите python объединить элементы из str_list с разделителем sentenceas. - person Cédric Julien; 24.11.2016
comment
"".join(sentence.split()) действительно является каноническим решением, эффективно удаляющим все пробелы, а не просто пробелы. Марк Байерс 'отлично ответ, вероятно, должен был быть принят вместо этого менее применимого ответа. - person Cecil Curry; 04.07.2017
comment
в случае более чем двух пробелов в конечной строке может помочь дополнительный sentence.strip().rstrip(), то же самое касается sentence.strip().lstrip() для beginnig. Не идеально, но работает без re, на тот случай, если простой .strip() их пропустит - person Rolands.EU; 26.02.2020
comment
Решение работает, но немного сбивает с толку - при использовании replace оно возвращает строку, а не заменяет на месте, поэтому вам нужно sentence = sentence.replace(" ", "") - person Elendurwen; 16.12.2020

Чтобы удалить только пробелы, используйте str.replace:

sentence = sentence.replace(' ', '')

Чтобы удалить все символы пробелов (пробел, табуляция, новая строка и т. Д.), Вы можете использовать _ 3_, затем join:

sentence = ''.join(sentence.split())

или регулярное выражение:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

Если вы хотите удалить пробелы только в начале и в конце, вы можете использовать strip:

sentence = sentence.strip()

Вы также можете использовать lstrip, чтобы удалить пробелы только в начале строки, а < a href = "http://docs.python.org/2/library/stdtypes.html#str.rstrip"> rstrip, чтобы удалить пробел в конце строки.

person Mark Byers    schedule 25.11.2011
comment
Примечание: вам не нужно компилировать step, re.sub (и друзья) кешируют скомпилированный шаблон. См. Также ответ Эмиля. - person Andy Hayden; 22.04.2015
comment
python3: yourstr.translate(str.maketrans('', '', ' \n\t\r')) - person deed02392; 17.04.2019

Альтернативой является использование регулярных выражений и сопоставление этих странных символов пробела. Вот некоторые примеры:

Удалите ВСЕ пробелы в строке, даже между словами:

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)

Удалите пробелы в НАЧАЛЕ строки:

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)

Удалите пробелы в КОНЦЕ строки:

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)

Удалите пробелы как в НАЧАЛЕ, так и в КОНЦЕ строки:

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)

Удалите ТОЛЬКО ДВОЙНЫЕ пробелы:

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))

(Все примеры работают как в Python 2, так и в Python 3)

person Emil Stenström    schedule 19.02.2015
comment
Не работает для \ u202a1234 \ u202c. Дает тот же результат: u '\ u202a1234 \ u202c' - person Sarang; 06.07.2016
comment
@Sarang: это не пробельные символы (погуглите, и вы увидите), а общая пунктуация. Мой ответ касается только удаления символов, классифицированных как пробелы. - person Emil Stenström; 07.07.2016
comment
Это единственное решение, которое я вижу здесь, которое удаляет эти чертовски надоедливые символы пробелов Unicode, спасибо fam - person CapnShanty; 16.10.2019

Пробелы включают пробел, табуляции и CRLF. Итак, мы можем использовать элегантную и однострочную строковую функцию _ 1_:

Python 3

' hello  apple '.translate(str.maketrans('', '', ' \n\t\r'))

ИЛИ, если вы хотите быть внимательными:

import string
' hello  apple'.translate(str.maketrans('', '', string.whitespace))

Python 2

' hello  apple'.translate(None, ' \n\t\r')

ИЛИ, если вы хотите быть внимательными:

import string
' hello  apple'.translate(None, string.whitespace)
person MaK    schedule 28.11.2015
comment
Это не поможет с пробелами Unicode, такими как \xc2\xa0 - person Suzana; 29.12.2015
comment
ans.translate( None, string.whitespace ) выдает только builtins.TypeError: translate() takes exactly one argument (2 given) для меня. Документы говорят, что аргумент - это таблица перевода, см. String.maketrans (). Но см. Комментарий Амнона Харела ниже. - person user405; 04.09.2017
comment
' hello apple'.translate(str.maketrans('', '', string.whitespace)) Примечание: лучше создать переменную для хранения транс-таблицы, если вы собираетесь делать это несколько раз. - person Shogan Aversa-Druesne; 10.12.2018

Для удаления пробелов в начале и в конце используйте strip.

>> "  foo bar   ".strip()
"foo bar"
person wal-o-mat    schedule 25.11.2011
comment
В вопросе конкретно предлагается удалить все пробелы, а не только на концах. Пожалуйста, обратите внимание. - person Shayan Shafiq; 04.03.2020

' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK уже указывал выше на метод "translate". И этот вариант работает с Python 3 (см. этот вопрос и ответ).

person Amnon Harel    schedule 26.09.2016
comment
Спасибо! Или xxx.translate( { ord(c) :None for c in string.whitespace } ) для тщательности. - person user405; 04.09.2017

Будь осторожен:

strip выполняет rstrip и lstrip (удаляет начальные и конечные пробелы, табуляцию, возврат и подачу формы, но не удаляет их в середине строки).

Если вы заменяете только пробелы и табуляции, вы можете получить скрытые CRLF, которые кажутся соответствующими тому, что вы ищете, но не совпадают.

person yan bellavance    schedule 12.11.2014
comment
Хотя это хороший момент, на самом деле это не ответ и должен быть комментарием, если вы не предложите решение. Не могли бы вы предоставить решение именно то, что я ищу? Ваше здоровье - person Dpedrinha; 10.12.2020

Кроме того, strip имеет несколько разновидностей:

Удалите пробелы в НАЧАЛЕ и КОНЦЕ строки:

sentence= sentence.strip()

Удалите пробелы в НАЧАЛЕ строки:

sentence = sentence.lstrip()

Удалите пробелы в КОНЦЕ строки:

sentence= sentence.rstrip()

Все три строковые функции strip lstrip и rstrip могут принимать параметры строки для удаления, по умолчанию все пробелы. Это может быть полезно, когда вы работаете с чем-то конкретным, например, вы можете удалить только пробелы, но не символы новой строки:

" 1. Step 1\n".strip(" ")

Или вы можете удалить лишние запятые при чтении списка строк:

"1,2,3,".strip(",")
person Anna    schedule 06.04.2018

Удалите все пробелы в строке с обоих концов и между словами.

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

Документы Python:

person handle    schedule 13.03.2020
comment
Я знаю, что re предлагалось и раньше, но я обнаружил, что фактический ответ на заголовок вопроса был немного скрыт среди всех других вариантов. - person handle; 13.03.2020

попробуйте это .. вместо того, чтобы использовать re, я думаю, что использовать разделение с полосой намного лучше

def my_handle(self):
    sentence = ' hello  apple  '
    ' '.join(x.strip() for x in sentence.split())
#hello apple
    ''.join(x.strip() for x in sentence.split())
#helloapple
person Assad Ali    schedule 10.10.2020

person    schedule
comment
вопрос заключался в том, чтобы удалить все пробелы, включая табуляции и символы новой строки, этот фрагмент удалит только обычные пробелы. - person Maximilian Peters; 24.10.2016