Подтвердить что ты не робот

Полосы пробелов/вкладки/новые строки - 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

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

4b9b3361

Ответ 1

Используйте str.split([sep[, maxsplit]]) без sep или sep=None:

От docs:

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

Demo:

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

Ответ 2

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

>>> 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().

Ответ 3

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

Ответ 5

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

Ответ 6

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

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)

ВЫХОД:

IwantoRemoveallwhiespaces, newlinesandtabs

Добрый день!

Ответ 7

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

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

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

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

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

Ответ 8

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

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

import requests
import re

url = 'https://stackoverflow.com/info/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://stackoverflow.com/info/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