Убрать пробелы / табуляции / переводы строк - 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