Полосы пробелов/вкладки/новые строки - 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
Кажется, что это просто, но я кое-что упустил. Должен ли я что-то импортировать?
Ответы
Ответ 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
Ответ 4
Проверьте ответ на этот вопрос:
Как обрезать пробелы (включая вкладки)?
strip() удаляет только ведущие и конечные символы, а не ВСЕ символы.
Ответ 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