Python Remove Character from String: คู่มือการลบอักขระออกจากสตริง
คุณสามารถลบอักขระออกจากสตริง Python ได้ด้วย replace() หรือ translate() ทั้งสองเมธอดแทนที่อักขระหรือสตริงด้วยค่าที่กำหนด หากระบุสตริงว่าง อักขระหรือสตริงที่เลือกจะถูกลบออกจากสตริงโดยไม่มีการแทนที่
Python Remove a Character from a String
ไม่ใช่ทุกสตริงที่มีค่าที่เราต้องการ ผู้ใช้อาจใส่สัญลักษณ์ในช่องป้อนข้อมูลที่คุณไม่ต้องการให้ปรากฏ คุณอาจต้องการลบอินสแตนซ์ใดๆ ของตัวอักษรเฉพาะจากสตริง
ไม่ว่าคุณจะต้องการลบอักขระอะไรจากสตริง Python ก็ตาม Python ครอบคลุมคุณแล้ว!
ในคู่มือนี้ เราจะอธิบายวิธีลบอักขระหรือชุดอักขระออกจากสตริง เราจะอ้างอิงตัวอย่างในระหว่างทาง
เราจะอธิบายวิธีต่อไปนี้:
- ใช้เมธอด
replace() - ใช้เมธอด
translate() - ลบอักขระสุดท้ายด้วยดัชนี (indexing)
มาเริ่มกัน!
Remove Character from String Python: replace()
ฟังก์ชัน replace() ของสตริง แทนที่อักขระด้วยอักขระใหม่ ฟังก์ชันนี้ใช้แทนที่อักขระใดๆ ด้วยสตริงว่างได้
เราสร้างโปรแกรมขอให้ผู้ใช้ป้อนชื่อผู้ใช้ (username) อักขระ underscore (_) ห้ามใช้ใน username เปิดไฟล์ Python ใหม่และวางโค้ดนี้:
username = input("Choose a username: ")
final_username = username.replace("_", "")
print("Your username is: " + final_username)
โค้ดนี้ขอให้ผู้ใช้เลือก username ด้วยเมธอด input()
เมธอด replace() ลบอักขระ underscore จากสตริงต้นฉบับ และแทนที่ทุกอินสแตนซ์ของอักขระนั้นด้วยสตริงว่าง จากนั้นพิมพ์ username ไม่มี underscore ไปที่คอนโซล
มารันโปรแกรม:
Choose a username: pythonista_101 Your username is: pythonista101
โค้ดของเราลบอักขระ underscore จาก username ที่เราระบุ โค้ดทำงานกับสตริงที่ไม่มี underscore:
Choose a username: pythonista101 Your username is: pythonista101
เมื่อ username ไม่มี underscore ไม่มีอะไรเกิดขึ้น
ลบหลายอักขระด้วย replace()
เกิดอะไรขึ้นถ้าต้องการลบหลายอักขระจากสตริง? Python ช่วยคุณได้ เราสามารถใช้ replace() ภายในลูป for เพื่อลบหลายอักขระจากสตริง
ในตัวอย่างก่อนหน้า เราลบ underscore จาก username ถ้าต้องการลบจุด (full stops), underscore, และเครื่องหมายอัศจรรย์ (!) จากสตริง? สร้างไฟล์ Python ใหม่และวางโค้ดนี้:
username = input("Choose a username: ")
disallowed_characters = "._!"
for character in disallowed_characters:
username = username.replace(character, "")
print("Your username is: " + username)
ก่อนอื่น เราขอให้ผู้ใช้เลือก username เรากำหนดสตริงที่มีอักขระทั้งหมดที่ไม่ควรปรากฏใน username ของผู้ใช้
ต่อไป เราสร้างลูป for ลูปนี้วนผ่านทุกอักขระในสตริง "disallowed_characters" ในแต่ละรอบ อักขระที่ลูป for กำลังวน จะถูกแทนที่ในสตริง "username" ด้วยอักขระว่าง
มารันโค้ด:
Choose a username: pythonista.101!!! Your username is: pythonista101
โค้ดของเรากรองจุดและเครื่องหมายอัศจรรย์ออก
Remove Character from String Python: translate()
เมธอด translate() ของ Python แทนที่อักขระในสตริงตามเนื้อหาของตารางอักขระ (character table) เมธอดนี้รับอาร์กิวเมนต์หนึ่ง: ตารางแปล (translation table) ที่มีอักขระที่จะแมป
เพื่อใช้เมธอดนี้ เราต้องสร้างตารางแปล ตารางนี้ระบุว่าอักขระไหนควรถูกแทนที่ในสตริง
มาใช้ translate() ลบ underscore ทั้งหมดจาก username:
username = input("Choose a username: ")
final_username = username.translate({ ord("_"): None })
print("Your username is: " + final_username)
โค้ดนี้แทนที่ทุกอินสแตนซ์ของอักขระ "_" ด้วยค่า None เมธอด ord() ของ Python คืนค่ารหัส Unicode ที่เกี่ยวข้องกับอักขระ "_" ใช้โดย translate() ระบุอักขระที่เราต้องการลบ
ลบหลายอักขระด้วย translate()
คุณสามารถลบหลายอักขระจากสตริงด้วย translate()
เราสามารถทำได้โดยสร้าง iterator วนผ่านลิสต์อักขระที่ต้องการลบจากสตริง
มาลบ underscore, จุด, และเครื่องหมายอัศจรรย์ทั้งหมดจาก username:
username = input("Choose a username: ")
final_username = username.translate({ ord(c): None for c in "._!" })
print("Your username is: " + final_username)
เมธอด translate() ตรวจสอบว่าอักขระแต่ละตัวในสตริง "username" เท่ากับจุด, เครื่องหมายอัศจรรย์, หรือ underscore หรือไม่ หากพบอักขระเหล่านี้ จะถูกแทนที่ด้วย None ซึ่งลบอักขระออกจากสตริง
เราใช้ list comprehension ของ Python วนผ่านทุกอักขระในลิสต์อักขระที่ استثนียกเว้น
มาทดสอบโปรแกรม:
Choose a username: pythonista_100! Your username is: pythonista101
โค้ดของเราลบอักขระพิเศษที่เราระบุออกจากสตริงสำเร็จ
Python: Remove Last Character from String
เพื่อลบอักขระสุดท้ายจากสตริง ใช้สไลซ์ [:-1] ไวยากรณ์นี้เลือกอักขระที่ตำแหน่งดัชนี -1 (อักขระสุดท้ายในลิสต์) จากนั้นไวยากรณ์คืนค่าทุกอักขระยกเว้นตัวนั้น
ไวยากรณ์สำหรับลบอักขระสุดท้ายจากสตริง:
your_string = "A string" print(your_string[:-1])
ตัวอย่างลบอักขระสุดท้าย
เราต้องการสร้างโปรแกรมลบอักขระสุดท้ายจากรหัสพนักงาน (employee identifier) อักขระนี้บอกแผนกที่พนักงานทำงาน
เช่น ค่า "M" บอกว่าพนักงานทำงานแผนกการตลาด (marketing) เราจะลบอักขระนี้ ระบบติดตามพนักงานนี้ถูกแทนที่ด้วยระบบใหม่ ระบบใหม่ติดตามแผนกที่พนักงานทำงาน
เริ่มต้นด้วยการขอให้ผู้ใช้ป้อนรหัสพนักงานด้วย input():
identifier = input("What is the employee's identifier? ")
ต่อไป ลบอักขระสุดท้ายจาก identifier:
new_identifier = identifier[:-1]
[:-1] เป็นการดำเนินการ string slice ที่ลบอักขระสุดท้ายจากลิสต์ เราใช้ negative indexing ดึงรายการจากท้ายสตริง ตอนนี้ แสดงรหัสพนักงานใหม่ไปที่คอนโซล:
print("The employee's new identifier is {}.".format(new_identifier))
คำสั่ง format() แทนที่วงเล็บปีกกาในสตริงของเราด้วยรหัสพนักงานใหม่ มารันโค้ดดู:
What is the employee's identifier? 28371M The employee's new identifier is 28371.
โปรแกรมของเราลบค่าสุดท้ายในรหัสพนักงาน
สรุป
คุณสามารถลบอักขระหรือหลายอักขระจากสตริงได้ด้วย replace() หรือ translate() ทั้ง replace() และ translate() คืนผลลัพธ์เดียวกัน: สตริงโดยไม่มีอักขระที่คุณระบุ
สำหรับมือใหม่ เมธอด replace() ใช้ง่ายกว่า เพราะรับแค่สองพารามิเตอร์
พารามิเตอร์แรกคืออักขระที่ต้องการแทนที่ พารามิเตอร์ที่สองคือค่าที่ต้องการแทนที่อักขระ หากต้องการแทนที่หลายอักขระ สามารถใช้ลูป for
สนใจเรียนรู้เพิ่มเติมเกี่ยวกับ Python? ดูคู่มือ How to Learn Python สำหรับเคล็ดลับจากผู้เชี่ยวชาญช่วยพัฒนาการเรียนรู้