12

Как удалить пробелы?

13

Есть ли функция на Python, которая удаляет пробелы (пробелы и табуляции) из строки?

Например, чтобы входная строка " \t пример строки\t " преобразовывалась в "пример строки".

5 ответ(ов)

0

Для удаления пробелов в начале и в конце строки можно использовать метод 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() подходит для удаления пробелов по краям строки, а регулярные выражения - для удаления всех пробелов внутри строки.

0

Чтобы обрезать многострочную строку или строки из файла в 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 ']

Таким образом, вы можете эффективно обрезать строки как из многострочной строки, так и из файла.

0

На сайте 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, возможно удаление пробелов внутри строки, что может быть нежелательно, так как это изменит содержимое оригинальной строки.

0

Whitespace включает в себя пробелы, табуляции и CRLF. Поэтому элегантная функция для работы со строками, которую мы можем использовать, — это translate.

Вот пример использования:

' hello  apple'.translate(None, ' \n\t\r')

ИЛИ если вы хотите быть более тщательным, вы можете сделать это следующим образом:

import string
' hello  apple'.translate(None, string.whitespace)

Эти способы позволят вам удалить все лишние пробелы и символы в строке.

0

Конечно! Вот перевод на русский в стиле ответа на 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'.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь