Как удалить пробелы?
Есть ли функция на Python, которая удаляет пробелы (пробелы и табуляции) из строки?
Например, чтобы входная строка " \t пример строки\t "
преобразовывалась в "пример строки"
.
5 ответ(ов)
Для удаления пробелов в начале и в конце строки можно использовать метод strip()
:
s = ' foo \t '
print(s.strip()) # выводит "foo"
Если же нужно удалить все пробелы из строки, включая между словами, можно воспользоваться регулярными выражениями:
import re
pat = re.compile(r'\s+')
s = ' \t foo \t bar \t '
print(pat.sub('', s)) # выводит "foobar"
Таким образом, strip()
подходит для удаления пробелов по краям строки, а регулярные выражения - для удаления всех пробелов внутри строки.
Чтобы обрезать многострочную строку или строки из файла в Python, вы можете использовать метод strip()
, который удаляет пробелы и символы табуляции в начале и конце каждой строки. Вот пример, основанный на многострочной строке:
s = """ line one
\tline two\t
line three """
В этом примере первая строка начинается с пробела, вторая - и с пробела, и с табуляции, а третья заканчивается пробелом.
Вы можете разделить строку на отдельные строки с помощью splitlines()
и затем применить strip()
к каждой из них:
s1 = s.splitlines()
print(s1) # Результат: [' line one', '\tline two\t', 'line three ']
# Удаляем пробелы с начала и конца каждой строки
print([i.strip() for i in s1]) # Результат: ['line one', 'line two', 'line three']
Также вы можете использовать цикл для обработки строк:
for line in s.splitlines():
line = line.strip()
process(line) # Здесь 'process' - это ваша функция для обработки строки
Если вы читаете файл построчно, это будет выглядеть так:
with open(filename) as my_file:
for line in my_file:
line = line.strip()
process(line)
Обратите внимание, что метод splitlines()
удаляет символы перевода строки. Если вы хотите сохранить их, передайте аргумент True
:
s2 = s.splitlines(True)
print(s2) # Результат: [' line one\n', '\tline two\t\n', 'line three ']
Таким образом, вы можете эффективно обрезать строки как из многострочной строки, так и из файла.
На сайте StackOverflow еще не было опубликовано никаких решений для регулярных выражений, касающихся данной задачи. Вот пример кода на Python:
Сопоставление строк
import re
# Компилируем регулярное выражение
p = re.compile(r'\s*(.*\S)?\s*')
# Примеры использования
m = p.match(' \t blah ')
print(m.group(1)) # Вывод: 'blah'
m = p.match(' \tbl ah \t ')
print(m.group(1)) # Вывод: 'bl ah'
m = p.match(' \t ')
print(m.group(1)) # Вывод: None
Поиск подстрок
При использовании поиска вам нужно будет обрабатывать случай, когда строка содержит только пробелы, отдельно:
p1 = re.compile(r'\S.*\S')
m = p1.search(' \tblah \t ')
print(m.group()) # Вывод: 'blah'
m = p1.search(' \tbl ah \t ')
print(m.group()) # Вывод: 'bl ah'
m = p1.search(' \t ')
# Здесь возникнет ошибка
try:
print(m.group())
except AttributeError:
print("Ошибка: 'NoneType' не имеет атрибута 'group'")
Примечание
Если вы используете re.sub
, возможно удаление пробелов внутри строки, что может быть нежелательно, так как это изменит содержимое оригинальной строки.
Whitespace включает в себя пробелы, табуляции и CRLF. Поэтому элегантная функция для работы со строками, которую мы можем использовать, — это translate.
Вот пример использования:
' hello apple'.translate(None, ' \n\t\r')
ИЛИ если вы хотите быть более тщательным, вы можете сделать это следующим образом:
import string
' hello apple'.translate(None, string.whitespace)
Эти способы позволят вам удалить все лишние пробелы и символы в строке.
Конечно! Вот перевод на русский в стиле ответа на StackOverflow:
(re.sub(' +', ' ', (my_str.replace('\n', ' ')))).strip()
Это удалит все лишние пробелы и символы перевода строки. Надеюсь, это поможет.
import re
my_str = ' a b \n c '
formatted_str = (re.sub(' +', ' ', (my_str.replace('\n', ' ')))).strip()
В результате:
' a b \n c ' будет преобразовано в 'a b c'.
Удалить все пробелы в строке
Как удалить пробелы из строки?
Есть ли в Python метод подстроки 'contains' для строк?
Объединение двух столбцов текста в DataFrame pandas
Вывод строки в текстовый файл