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


101

Я пытаюсь удалить все пробелы / вкладки / символы новой строки в 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

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


Посмотрите ответ на этот связанный вопрос: stackoverflow.com/questions/1185524/… strip () удаляет только начальные и конечные символы, а не ВСЕ символы.
dckrooney

1
может быть полезно: stackoverflow.com/questions/8928557/…
newtover

1
Это сработало для меня из: [Как обрезать пробелы (включая табуляции)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Ответы:


129

Используйте 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'

58

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

>>> 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()если хотите.


15

Воспользуйтесь библиотекой 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

Выход:

Я хочу удалить все пробелы, новые строки и вкладки


1
Это исправление исходного ответа, данного @ TheGr8Adakron, а не его дубликат
Jesuisme


11

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

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)

ВЫХОД:

Иванто: удалить все пробелы, новые строки и вкладки

Добрый день!


1
Спасибо за решение - я думаю, что нужна небольшая поправка, она должна быть «+» вместо «*».
Саджад Карим

6

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

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

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

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

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

2

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

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

import requests
import re

url = '/programming/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 = '/programming/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


0

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

>>> 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.