Як видалити провідні пробіли в Python?


181

У мене є текстовий рядок, який починається з кількох пробілів, що варіюється між 2 та 4.

Який найпростіший спосіб видалити провідний пробіл? (тобто видалити все перед певним символом?)

"  Example"   -> "Example"
"  Example  " -> "Example  "
"    Example" -> "Example"

Відповіді:


319

lstrip()Метод видалення провідних пробільні, символ нового рядка і символи табуляції на початку рядки:

>>> '     hello world!'.lstrip()
'hello world!'

Редагувати

Як зазначає balpha в коментарях , для видалення лише пробілів від початку рядка lstrip(' ')слід використовувати:

>>> '   hello world with 2 spaces and a tab!'.lstrip(' ')
'\thello world with 2 spaces and a tab!'

Питання, пов'язані з цим:


10
Зверніть увагу, що lstrip, видаляючи провідне пробіл, який може бути більше, ніж пробіли (вкладки тощо). Зазвичай це те, що ти хочеш. Якщо ви хочете видалити лише пробіли та пробіли, телефонуйте "bla" .lstrip ("")
balpha

1
@balpha: Дякую за точку! Я додав це до відповіді.
coobird

3
Програмував роками і не знав цього, рятівник
Кріс Хоукс

3
Можливо, буде корисно відзначити для нових програмістів Python, що рядки в python є незмінними, тому, якщо ви працюєте зі рядком 'string_a', ви можете подумати, що string_a.lstrip () змінить сам рядок, але насправді ви б потрібно присвоїти значення string_a.lstrip () собі або новій змінній, наприклад "string_a = string_a.lstrip ()".
Поля

2
зауважте: як є lstrip (), там є також strip () та rstrip ()
Олександр Стор

87

Функція stripвидалить пробіли з початку та в кінці рядка.

my_str = "   text "
my_str = my_str.strip()

буде встановлено my_strна "text".


18

Якщо ви хочете вирізати пробіли перед і за словом, але дотримуйтесь середніх.
Ви можете використовувати:

word = '  Hello World  '
stripped = word.strip()
print(stripped)

Варто відзначити , що це робить друк 'Hello World'із середнім простором неушкодженою, для тих , хто цікаво, я припускаю , що це було відкинуто , бо початковий питання був спеціально з проханням прибрати провідні прогалини.
conapart3

2
docs.python.org/3/whatsnew/3.0.html Друк - це функція. Оператор друку замінено функцією print () з аргументами ключових слів, які замінюють більшість спеціальних синтаксисів старого оператора друку (PEP 3105).
mbrandeis

@mbrandeis Як ця заява актуальна тут?
MilkyWay90

12

Щоб видалити все перед певним символом, використовуйте регулярний вираз:

re.sub(r'^[^a]*', '')

щоб видалити все до першого "а". [^a]можна замінити будь-яким класом символів, який вам подобається, наприклад символами слова.


3
Я думаю , що хлопець попросив «простий і простий спосіб»
Неа

10
Щоправда, але він також (можливо, ненавмисно) попросив вирішити більш загальну проблему, "тобто зняти все перед певним персонажем?", І це вже загальне рішення.
cjs

1

Питання не стосується багаторядкових рядків, але ось, як ви позбавите провідну пробіл з багаторядкової рядок, використовуючи стандартний модуль перенесення тексту бібліотеки python . Якби у нас був такий рядок:

s = """
    line 1 has 4 leading spaces
    line 2 has 4 leading spaces
    line 3 has 4 leading spaces
"""

якби ми print(s)отримали вихід на зразок:

>>> print(s)
    this has 4 leading spaces 1
    this has 4 leading spaces 2
    this has 4 leading spaces 3

і якщо ми використовували textwrap.dedent:

>>> import textwrap
>>> print(textwrap.dedent(s))
this has 4 leading spaces 1
this has 4 leading spaces 2
this has 4 leading spaces 3
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.