Убрать пробелы / табуляции / переводы строк - python

Я пытаюсь удалить все пробелы / табуляции / новые строки в Python 2.7 в Linux.

Я написал это, что должно сделать работу:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

выход:

I want to Remove all white   spaces, new lines 
 and tabs

Это кажется простым делом, но мне здесь чего-то не хватает. Должен ли я что-то импортировать?

6 ответов

Использование str.split([sep[, maxsplit]]) без sep или же sep=None:

Из документов:

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

Демо - версия:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

использование str.join в возвращенном списке, чтобы получить этот вывод:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'

Если вы хотите удалить несколько пустых элементов и заменить их на один пробел, самый простой способ - использовать регулярное выражение, например:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

Затем вы можете удалить завершающий пробел с помощью .strip() если хотите.

Используйте библиотеку re

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

Выход:

IwanttoRemoveallwhitespaces, newlinesandtabs

Это удалит только вкладку, новые строки, пробелы и ничего больше.

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

ВЫХОД:

IwaoRemoveallwhiespaces, ewliesadabs

Добрый день!

import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs

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

Вот что я делаю:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

или если у вас есть куча вещей, которые нужно удалить так, чтобы однострочное решение было бесполезно длинным:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')

Проверьте ответ на этот связанный вопрос: Как обрезать пробелы (включая вкладки)?

strip () удаляет только начальные и конечные символы, а не ВСЕ символы.

Как насчет однострочника, использующего понимание списка внутри соединения?

>>> foobar = "aaa bbb\t\t\tccc\nddd"
>>> print(foobar)
aaa bbb                 ccc
ddd

>>> print(''.join([c for c in foobar if c not in [' ', '\t', '\n']]))
aaabbbcccddd

Поскольку нет ничего более сложного, я хотел бы поделиться этим, поскольку это помогло мне.

Это то, что я изначально использовал:

import requests
import re

url = 'https://stackru.com/questions/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

Нежелательный результат:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

Вот что я изменил:

import requests
import re

url = 'https://stackru.com/questions/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

Желаемый результат:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

Точное регулярное выражение, которое упомянул @MattH, помогло мне встроить его в мой код. Спасибо!

Примечание: это python3

Другие вопросы по тегам