Удалить все пробелы в строке в Python - PullRequest
665 голосов
/ 25 ноября 2011

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

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

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

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

Ответы [ 9 ]

1444 голосов
/ 25 ноября 2011

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

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

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

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

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

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'
235 голосов
/ 25 ноября 2011

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

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

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

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

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

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

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

sentence = sentence.strip()

Вы также можете использовать lstrip для удаления пробелов только из начала строки и rstrip для удаления пробелов из конца строки.

79 голосов
/ 19 февраля 2015

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

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

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)

35 голосов
/ 28 ноября 2015

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

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

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

import string
' hello  apple'.translate(None, string.whitespace)
18 голосов
/ 25 ноября 2011

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

>> "  foo bar   ".strip()
"foo bar"
6 голосов
/ 26 сентября 2016
' hello  \n\tapple'.translate( { ord(c):None for c in ' \n\t\r' } )

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

4 голосов
/ 12 ноября 2014

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

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

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

3 голосов
/ 06 апреля 2018

Кроме того, полоса имеет несколько вариантов:

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

sentence= sentence.strip()

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

sentence = sentence.lstrip()

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

sentence= sentence.rstrip()

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

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

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

"1,2,3,".strip(",")
3 голосов
/ 24 октября 2016
import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)
...