Как мне обрезать пробел из строки Python? - PullRequest
1060 голосов
/ 17 апреля 2009

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

Например:

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

Ответы [ 7 ]

1617 голосов
/ 17 апреля 2009

Всего один пробел или все такие пробелы? Если второе, то строки уже имеют метод .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'
248 голосов
/ 18 мая 2011

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

myString.strip()

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

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

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

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

115 голосов
/ 17 апреля 2012

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

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')
49 голосов
/ 17 апреля 2009

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

myString.strip()
21 голосов
/ 17 апреля 2009

Вы хотите полосу ():

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

for phrase in myphrases:
    print phrase.strip()
0 голосов
/ 11 апреля 2019

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

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)))
0 голосов
/ 24 сентября 2018

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

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)

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

...