Python'daki önde gelen boşlukları nasıl kaldırabilirim?


181

2 ve 4 arasında değişen boşluk sayısı ile başlayan bir metin dizesi var.

Önde gelen boşluğu kaldırmanın en basit yolu nedir? (örneğin, belirli bir karakterden önce her şeyi kaldırmak ister misiniz?)

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

Yanıtlar:


319

lstrip()Yöntem, bir dize başında üzerinde boşlukları, yeni satır ve sekme karakterleri lider kaldırır:

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

Düzenle

Balpha'nın yorumlarda belirttiği gibi , sadece ipin başlangıcından boşlukları kaldırmak lstrip(' ')için kullanılmalıdır:

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

İlgili soru:


10
Ancak, bu lstrip , boşluklardan (sekmeler vb.) Daha fazla olabilecek önde gelen boşlukları kaldırırken unutmayın . Genellikle istediğiniz budur. Yalnızca boşlukları ve boşlukları kaldırmak istiyorsanız, "bla" .lstrip ("")
balpha

1
@balpha: Bunu belirttiğiniz için teşekkürler! Bunu cevaba ekledim.
coobird

3
yıllardır programlama ve bunu bilmiyordum, cankurtaran
Chris Hawkes

3
Yeni Python programcıları için python'daki dizelerin değişmez olduğunu not etmek yararlı olabilir, bu nedenle 'string_a' dizesiyle çalışıyorsanız string_a.lstrip () 'nin dizeyi değiştireceğini düşünebilirsiniz, ancak aslında string_a.lstrip () değerini kendisine veya yeni bir değişkene atamanız gerekir, örneğin "string_a = string_a.lstrip ()".
Alanlar

2
not: lstrip () olduğu için strip () ve rstrip () de vardır
Alexander Stohr

87

İşlev strip, bir dizenin başından ve sonundan boşlukları kaldıracaktır.

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

ayarlayacaktır my_striçin "text".


18

Kelimenin önündeki ve arkasındaki boşlukları kesmek, ancak ortadaki boşlukları tutmak istiyorsanız.
Kullanabilirsin:

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

Bu fazlalaştı yapar baskı 'Hello World'herkes merak için, bozulmamış orta alana sahip, ben orijinal soru özellikle kaldırmak için soruyordu çünkü aşağı seçildi tahmin lider boşluklar.
conapart3

2
docs.python.org/3/whatsnew/3.0.html Yazdır Bir İşlevdir Yazdırma ifadesi, eski yazdırma ifadesinin (PEP 3105) özel sözdiziminin çoğunu değiştirmek için anahtar kelime argümanlarıyla birlikte print () işleviyle değiştirildi.
mbrandeis

@mbrandeis Bu ifade burada nasıl alakalı?
MilkyWay90

12

Belirli bir karakterden önce her şeyi kaldırmak için normal bir ifade kullanın:

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

ilk 'a'ya kadar olan her şeyi kaldırmak için. [^a]kelime karakterleri gibi istediğiniz herhangi bir karakter sınıfıyla değiştirilebilir.


3
Bence adam "en kolay ve en basit yol" istedi
Nope

10
Doğru, ama aynı zamanda (belki de yanlışlıkla) daha genel bir sorun için çözüm istemiş, "yani belirli bir karakterden önce her şeyi kaldırmak ister misiniz?" Ve bu daha genel bir çözümdür.
cjs

1

Soru çok satırlı dizeleri ele almıyor, ancak python'un standart kitaplık textwrap modülünü kullanarak çok satırlı bir dizeden önde gelen boşlukları nasıl çıkaracağınız . Eğer şöyle bir dizemiz olsaydı:

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

eğer biz print(s)gibi çıktı almak istiyorsunuz:

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

ve eğer kullanırsak 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.