Как мне обрезать пробел из строки Python?

Как удалить начальные и конечные пробелы из строки в Python?

Например:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

14 ответов

Решение

Всего один пробел или все такие пробелы? Если второе, то строки уже имеют .strip() метод:

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '          Hello        '.strip()  # ALL spaces at ends removed
'Hello'

Если вам нужно удалить только один пробел, вы можете сделать это с помощью:

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

Также обратите внимание, что str.strip() удаляет также другие пробельные символы (например, табуляции и новые строки). Чтобы удалить только пробелы, вы можете указать символ для удаления в качестве аргумента stripт.е.

>>> "  Hello\n".strip(" ")
'Hello\n'

Как указано в ответах выше

myString.strip()

удалит все начальные и конечные пробельные символы, такие как \ n, \ r, \ t, \ f, пробел.

Для большей гибкости используйте следующее

  • Удаляет только начальные пробельные символы: myString.lstrip()
  • Удаляет только конечные пробельные символы: myString.rstrip()
  • Удаляет определенные пробельные символы: myString.strip('\n') или же myString.lstrip('\n\r') или же myString.rstrip('\n\t') и так далее.

Более подробная информация доступна в документации

strip также не ограничивается пробельными символами:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

Это удалит все начальные и конечные пробелы в myString:

myString.strip()

Вы хотите strip():

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

Это также можно сделать с помощью регулярного выражения

import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'

Чтобы удалить "Пробелы", которые вызывают множество ошибок отступов при запуске вашего готового кода или программ в Pyhton. Просто сделайте следующее; очевидно, если Python продолжает говорить, что ошибка (-ы) - это отступ в строке 1,2,3,4,5 и т. Д., Просто исправьте эту строку взад и вперед.

Однако, если у вас все еще возникают проблемы с программой, связанные с опечатками, операторами и т. Д., Убедитесь, что вы прочитали, почему ошибка Python кричит на вас:

Первое, что нужно проверить, это то, что у вас правильный отступ. Если да, то проверьте, нет ли в вашем коде символов табуляции с пробелами.

Помните: код будет выглядеть нормально (для вас), но интерпретатор отказывается его запускать. Если вы подозреваете это, быстрое исправление состоит в том, чтобы поместить ваш код в окно редактирования IDLE, затем выбрать Edit..."Select All в системе меню, прежде чем выбрать Format..."Untabify Region. Если вы смешали табуляцию с пробелами, это преобразует все ваши табуляции в пробелы за один раз (и исправит любые проблемы с отступами).

Видя эту ветку у новичка, у меня закружилась голова. Следовательно, придумал простой ярлык.

Хотя str.strip() работает для удаления начальных и конечных пробелов, она ничего не делает для пробелов между символами.

words=input("Enter the word to test")
# If I have a user enter discontinous threads it becomes a problem
# input = "   he llo, ho w are y ou  "
n=words.strip()
print(n)
# output "he llo, ho w are y ou" - only leading & trailing spaces are removed 

Вместо этого используйте str.replace(), чтобы было больше смысла, плюс меньше ошибок и больше по существу. Следующий код может обобщить использование str.replace()

def whitespace(words):
    r=words.replace(' ','') # removes all whitespace
    n=r.replace(',','|') # other uses of replace
    return n
def run():
    words=input("Enter the word to test") # take user input
    m=whitespace(words) #encase the def in run() to imporve usability on various functions
    o=m.count('f') # for testing
    return m,o
print(run())
output- ('hello|howareyou', 0)

Может быть полезно при наследовании того же в diff. функции.

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

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

Как удалить начальные и конечные пробелы из строки в Python?

Таким образом, приведенное ниже решение удалит ведущие и конечные пробелы, а также промежуточные пробелы. Например, если вам нужно получить четкие строковые значения без нескольких пробелов.

>>> str_1 = '     Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>>
>>>
>>> str_2 = '     Hello      World'
>>> print(' '.join(str_2.split()))
Hello World
>>>
>>>
>>> str_3 = 'Hello World     '
>>> print(' '.join(str_3.split()))
Hello World
>>>
>>>
>>> str_4 = 'Hello      World     '
>>> print(' '.join(str_4.split()))
Hello World
>>>
>>>
>>> str_5 = '     Hello World     '
>>> print(' '.join(str_5.split()))
Hello World
>>>
>>>
>>> str_6 = '     Hello      World     '
>>> print(' '.join(str_6.split()))
Hello World
>>>
>>>
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World

Как вы можете видеть, это удалит все несколько пробелов в строке (вывод Hello Worldдля всех). Местоположение не имеет значения. Но если вам действительно нужны начальные и конечные пробелы, тогдаstrip() было бы найти.

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

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)


def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss


def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))


def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(chars).lower()


def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(reversed(chars)).lower()


s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

Один из способов — использовать метод .strip() (удалив все окружающие пробелы).

      str = "  Hello World  "
str = str.strip()
**result: str = "Hello World"**

Обратите внимание, что .strip() возвращает копию строки и не изменяет объект подчеркивания (поскольку строки неизменяемы ).

Если вы хотите удалить все пробелы (а не только обрезать края):

      str = ' abcd efgh ijk  '
str = str.replace(' ', '')
**result: str = 'abcdefghijk'

Я хотел удалить слишком много пробелов в строке (также между строкой, а не только в начале или в конце). Я сделал это, потому что я не знаю, как это сделать иначе:

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
    else:
       ready = True
print(string)

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

Есть также способ сделать это без этой функции

string = "Hello Wor l d "
tmp_list = []
for char in string:
    if char != " ":
    tmp_list +=char
final_string = "".join(tmp_list)
print final_string

Но это просто для удовольствия:)

Другие вопросы по тегам