ฉันจะลบช่องว่างนำหน้าใน 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
รับการเขียนโปรแกรมมานานหลายปีและไม่ทราบว่าผู้ช่วยชีวิต
Chris Hawkes

3
มันอาจจะมีประโยชน์ที่จะต้องทราบสำหรับโปรแกรมเมอร์ Python ใหม่ที่สตริงใน python นั้นไม่เปลี่ยนรูปดังนั้นถ้าคุณทำงานกับสตริง 'string_a' คุณอาจคิดว่า string_a.lstrip () จะเปลี่ยนสตริงเอง แต่จริงๆแล้วคุณ จำเป็นต้องกำหนดค่าของ string_a.lstrip () ให้กับตัวเองหรือตัวแปรใหม่เช่น "string_a = string_a.lstrip ()"
ฟิลด์

2
หมายเหตุ: เนื่องจากมี lstrip () นอกจากนี้ยังมีแถบ () และ rstrip ()
Alexander Stohr

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 พิมพ์เป็นฟังก์ชั่นพิมพ์คำสั่งถูกแทนที่ด้วยฟังก์ชั่นการพิมพ์ () ด้วยข้อโต้แย้งคำหลักเพื่อแทนที่ไวยากรณ์พิเศษของคำสั่งพิมพ์เก่า (PEP 3105) ส่วนใหญ่
mbrandeis

@mbrandeis ข้อความนั้นเกี่ยวข้องกันอย่างไรที่นี่?
MilkyWay90

12

หากต้องการลบทุกอย่างออกก่อนอักขระบางตัวให้ใช้นิพจน์ทั่วไป:

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

เพื่อลบทุกอย่างจนถึง 'a' ตัวแรก [^a]สามารถถูกแทนที่ด้วยคลาสตัวละครใด ๆ ที่คุณชอบเช่นตัวอักษรคำ


3
ผมคิดว่าคนถามหา "วิธีที่ง่ายที่สุดและง่ายที่สุดที่"
Nope

10
จริง แต่เขาก็ทำเช่นนั้น (บางทีอาจจะตั้งใจ) ถามหาทางออกสำหรับปัญหาทั่วไปที่มากขึ้น "นั่นคือลบทุกอย่างก่อนที่จะมีตัวละคร?" และนี่ก็เป็นทางออกทั่วไป
cjs

1

คำถามไม่ได้อยู่ที่สตริงหลายบรรทัด แต่นี่คือวิธีที่คุณจะตัดช่องว่างนำหน้าจากสตริงหลายบรรทัดโดยใช้โมดูล textwrap ไลบรารี่มาตรฐานของไพ ธอน หากเรามีสตริงเช่น:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.