เมธอดของสตริงใน Python ทุกตัว อธิบายพร้อมตัวอย่าง
บทเรียนนี้แปลจากต้นฉบับภาษาอังกฤษRead in EnglishLeer en españolЧитать на русскомLer em portuguêsแจ้งข้อผิดพลาดในการแปล
สตริง (string) ใน Python มาพร้อมเมธอด (method) ในตัวมากมาย เหมือนกล่องเครื่องมือ เมธอดเหล่านี้ช่วยให้คุณเปลี่ยนตัวพิมพ์ใหญ่-เล็ก ลบช่องว่างส่วนเกิน ค้นหาคำ แยกข้อความออกเป็นส่วน ๆ และทำอะไรได้อีกมาก
ลองนึกว่าเมธอดของสตริงเหมือนแอปในโทรศัพท์ แต่ละแอปทำงานเฉพาะอย่างเดียว ตอนนี้ยังไม่ต้องจำให้ครบทุกตัว แค่รู้ว่ามีอยู่ก็พอ เมื่อถึงเวลาต้องใช้จะได้หยิบตัวที่ใช่มาใช้ได้ทันที
ในบทเรียนนี้ คุณจะได้เรียนเมธอดของสตริงที่สำคัญทุกตัว ผ่านตัวอย่างที่รันและแก้ไขได้จริง เมื่อจบบท คุณจะทำความสะอาด ค้นหา แยก และแปลงข้อความแบบไหนก็ได้ที่ต้องเจอใน Python
วิธีแปลงสตริงเป็นตัวพิมพ์ใหญ่ใน Python
Python มีเมธอด 5 ตัวสำหรับเปลี่ยนตัวพิมพ์ใหญ่-เล็กของสตริง ตัวที่ใช้บ่อยที่สุดคือ upper() และ lower()
HELLO, WORLD! hello, world! Hello, World! Hello, world! HELLO, WORLD!
upper() แปลงตัวอักษรทุกตัวเป็นตัวพิมพ์ใหญ่ ส่วน lower() แปลงตัวอักษรทุกตัวเป็นตัวพิมพ์เล็ก สองตัวนี้คือเมธอดหลักที่คุณจะได้ใช้บ่อยที่สุด
title() ทำให้อักษรตัวแรกของทุกคำเป็นตัวพิมพ์ใหญ่ เหมือนชื่อหนังสือภาษาอังกฤษ ส่วน capitalize() ทำให้เฉพาะอักษรตัวแรกสุดเป็นตัวพิมพ์ใหญ่ และเปลี่ยนที่เหลือทั้งหมดเป็นตัวพิมพ์เล็ก
swapcase() สลับตัวพิมพ์ของตัวอักษรทุกตัว ตัวพิมพ์ใหญ่กลายเป็นตัวพิมพ์เล็ก และตัวพิมพ์เล็กกลายเป็นตัวพิมพ์ใหญ่ ไม่ค่อยได้ใช้ แต่สะดวกเมื่อจำเป็น
User said yes! Ada Lovelace
วิธีลบช่องว่างออกจากสตริงใน Python
ช่องว่างส่วนเกินและตัวอักษรที่มองไม่เห็นแอบเข้ามาในสตริงอยู่บ่อย ๆ ไม่ว่าจะมาจากข้อมูลที่ผู้ใช้ป้อน การอ่านไฟล์ หรือการคัดลอกแล้ววาง เมธอดตระกูล strip() ของ Python จัดการเรื่องนี้ได้อย่างดี
' hello, world! ' 'hello, world!' 'hello, world! ' ' hello, world!'
strip() ลบช่องว่าง (whitespace) ออกจากทั้งสองด้านของสตริง ลองนึกถึงการตัดขอบขนมปังออกทั้งสองข้างของแซนด์วิช
lstrip() ตัดเฉพาะด้านซ้าย ส่วน rstrip() ตัดเฉพาะด้านขวา ตัว "l" และ "r" ย่อมาจาก left (ซ้าย) และ right (ขวา)
ในตัวอย่างเราใช้ repr() เพื่อให้คุณมองเห็นช่องว่างได้จริง ปกติ print() จะไม่ทำให้เห็นช่องว่างที่อยู่ท้ายสตริง
report.txt https://example.com
วิธีค้นหาข้อความภายในสตริงด้วย Python
Python มีหลายวิธีในการค้นหาข้อความภายในสตริง ตัวที่สำคัญที่สุดคือ find(), count(), startswith() และ endswith()
วิธีใช้ find() และ index() ใน Python
find() บอกตำแหน่งที่สตริงย่อย (substring) ปรากฏเป็นครั้งแรก โดยคืนค่าดัชนี (index) ซึ่งก็คือหมายเลขตำแหน่งของจุดแรกที่ตรงกัน เริ่มนับจาก 0
7 2 -1 3 11
เมื่อ find() หาสตริงย่อยไม่เจอ จะคืนค่า -1 นี่คือวิธีบอกว่า "ไม่พบ"
index() ทำงานเหมือน find() แต่ต่างกันในจุดสำคัญจุดเดียว: ถ้าไม่พบสตริงย่อย จะเกิดข้อผิดพลาด ValueError แทนที่จะคืนค่า -1
text = "hello world"
result = text.find("xyz")
print(result) # -1 (safe, no crash)text = "hello world"
# result = text.index("xyz")
# ValueError: substring not found
# Use index() only when you're SURE
# the substring exists
result = text.index("world")
print(result) # 6วิธีนับจำนวนครั้งที่พบในสตริงด้วย count()
count() บอกว่าสตริงย่อยปรากฏในสตริงกี่ครั้ง เมธอดนี้แยกตัวพิมพ์ใหญ่-เล็ก ดังนั้น "The" กับ "the" จึงนับแยกกัน
3 4 0 0
วิธีตรวจสอบตอนต้นและตอนท้ายของสตริงใน Python
startswith() และ endswith() คืนค่า True หรือ False เหมาะมากสำหรับตรวจสอบนามสกุลไฟล์ ส่วนขึ้นต้นของ URL หรือรูปแบบใด ๆ ที่อยู่ขอบของสตริง
True True False True
วิธีแทนที่ข้อความในสตริงของ Python
replace() เปลี่ยนสตริงย่อยทุกตัวที่พบให้เป็นอีกสตริงหนึ่ง เหมือนฟีเจอร์ค้นหาและแทนที่ในโปรแกรมพิมพ์เอกสาร
I like dogs. Cats are great. I have two dogs. I like dogs. Cats are great. I have two cats.
อาร์กิวเมนต์ตัวที่สามจะใส่หรือไม่ใส่ก็ได้ ใช้จำกัดจำนวนครั้งที่แทนที่ ถ้าไม่ใส่ replace() จะเปลี่ยนทุกตัวที่ตรงกัน
อย่าลืมว่า replace() แยกตัวพิมพ์ใหญ่-เล็ก "cats" กับ "Cats" ถือเป็นสตริงย่อยคนละตัวกัน
วิธีแยกสตริงใน Python
split() หั่นสตริงออกเป็นลิสต์ (list) ของสตริงที่สั้นลง โดยค่าเริ่มต้นจะแยกตรงช่องว่างทุกชนิด (เว้นวรรค แท็บ และการขึ้นบรรทัดใหม่)
['Python', 'is', 'easy', 'to', 'learn'] ['Alice', '25', 'New York', 'Engineer'] John Smith Jr.
อาร์กิวเมนต์ตัวแรกคือตัวคั่น (delimiter): ตัวอักษร (หรือสตริง) ที่ใช้เป็นจุดแยก ส่วนอาร์กิวเมนต์ตัวที่สองใช้จำกัดจำนวนครั้งที่แยก
rsplit() ทำงานแบบเดียวกัน แต่เริ่มแยกจากด้านขวา ซึ่งจะเห็นความต่างเมื่อคุณกำหนดจำนวนครั้งที่แยก
['home', 'user/documents/report.txt'] ['home/user/documents', 'report.txt']
วิธีรวมลิสต์เป็นสตริงใน Python
join() ทำงานตรงข้ามกับ split() โดยรับลิสต์ของสตริงแล้วนำมาต่อกันด้วยตัวคั่น ตัวคั่นคือสตริงที่คุณใช้เรียก join()
Python is awesome Python-is-awesome Python, is, awesome Python is awesome
รูปแบบการเขียนดูกลับด้านในตอนแรก: separator.join(list) ให้คิดว่า "ใช้ตัวคั่นนี้ต่อลิสต์นั้นเข้าด้วยกัน"
รูปแบบที่พบบ่อยคือ แยกสตริง แก้ไขแต่ละส่วน แล้วต่อกลับเข้าด้วยกัน
PYTHON IS EASY TO LEARN Alice,25,New York
วิธีตรวจสอบเนื้อหาของสตริงใน Python
Python มีเมธอดตระกูล is____() ที่คืนค่า True หรือ False ตามสิ่งที่อยู่ในสตริง เหมาะมากสำหรับตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อน
True False True False True False True False
isalpha() ตรวจว่ามีแต่ตัวอักษร isdigit() ตรวจว่ามีแต่ตัวเลข isalnum() ตรวจว่ามีแต่ตัวอักษร หรือ ตัวเลข (alphanumeric) และ isspace() ตรวจว่ามีแต่ช่องว่าง
เมธอดเหล่านี้ทุกตัวคืนค่า False เมื่อเป็นสตริงว่าง เพราะสตริงว่างไม่มีตัวอักษรให้ตรวจ จึงไม่มีอะไรผ่านการตรวจสอบ
"player42" is a valid username You entered the number 42
วิธีเติมช่องว่างและจัดตำแหน่งสตริงใน Python
บางครั้งคุณต้องการให้ข้อความกว้างเท่าที่กำหนด: ในตาราง ใบเสร็จ หรือผลลัพธ์ในเทอร์มินัลที่ดูเป็นระเบียบ เมธอดเติมข้อความ (padding) ของ Python จะเติมตัวอักษรลงในช่องที่เหลือให้เต็ม
hi ----hi---- hi........ ........hi 00042 007
center() จัดสตริงให้อยู่ตรงกลางของความกว้างที่กำหนด ljust() จัดชิดซ้ายแล้วเติมด้านขวา และ rjust() จัดชิดขวาแล้วเติมด้านซ้าย
zfill() เป็นทางลัดสำหรับเติมเลขศูนย์ข้างหน้าตัวเลข เหมาะมากสำหรับเลขที่คำสั่งซื้อ เวลาที่บันทึกไว้ (timestamp) หรือชื่อไฟล์อย่าง image_007.png
Item Price ----------------------- Coffee $4.50 Sandwich $8.99 Cookie $2.25 ----------------------- Total $15.74
วิธีเรียกเมธอดของสตริงต่อกันใน Python
เนื่องจากเมธอดของสตริงทุกตัวคืนค่าเป็นสตริงใหม่ คุณจึงเรียกเมธอดอื่นต่อจากผลลัพธ์นั้นได้ทันที เรียกว่า การเรียกเมธอดต่อกัน (method chaining)
hello world! hello world!
อ่านการเรียกต่อกันจากซ้ายไปขวา: ตัดช่องว่างก่อน จากนั้นแปลงเป็นตัวพิมพ์เล็ก แล้วจึงแทนที่ แต่ละเมธอดทำงานกับผลลัพธ์ของเมธอดก่อนหน้า
แบบฝึกหัด
ได้เวลานำเมธอดของสตริงไปใช้งานจริงแล้ว แบบฝึกหัดแต่ละข้อเน้นเมธอดคนละกลุ่มที่คุณเพิ่งเรียนไป
มีสตริงที่ไม่เรียบร้อยเก็บอยู่ในตัวแปร user_input สตริงนี้มีช่องว่างส่วนเกินทั้งสองด้าน และมีตัวพิมพ์ใหญ่ปนอยู่แบบสุ่ม
ทำความสะอาดโดย:
1. ลบช่องว่างออกจากทั้งสองด้าน
2. แปลงให้เป็นตัวพิมพ์เล็กทั้งหมด
แสดงผลลัพธ์ที่ทำความสะอาดแล้ว ผลลัพธ์ควรเป็น:
hello pythonนับว่าคำ "the" ปรากฏในประโยคด้านล่างกี่ครั้ง โดยใช้เมธอด count()
แสดงผลลัพธ์ในรูปแบบนี้ให้ตรงทุกตัวอักษร:
the appears 4 timesคำใบ้: แปลงเป็นตัวพิมพ์เล็กก่อน จะได้นับทั้ง "the" และ "The"
แทนที่ "JavaScript" ทุกตัวด้วย "Python" ในประโยคด้านล่าง แล้วแสดงผลลัพธ์
ผลลัพธ์ที่ต้องการ:
I love Python. Python is great. Learning Python is fun.มีข้อมูลหนึ่งบรรทัดที่คั่นแต่ละค่าด้วยจุลภาค (comma) ให้แยกออกเป็นค่าแต่ละค่า แล้วแสดงแต่ละค่าในบรรทัดของตัวเอง
ผลลัพธ์ที่ต้องการ:
Alice
25
New York
Engineerโค้ดนี้พยายามหาตำแหน่งของ "Python" ในประโยค ทำงานได้เมื่อมีคำนั้นอยู่ แต่จะพังเมื่อไม่มี
แก้โค้ดให้:
"Word not found" เมื่อไม่มีคำนั้นผลลัพธ์ที่ต้องการ:
Found at position 7
Word not foundคำใบ้: บั๊กอยู่ที่ index() พังเมื่อไม่มีคำนั้น เมธอดไหนที่คืนค่า -1 แทนการพัง
เขียนโปรแกรมตรวจสอบชื่อผู้ใช้ตามกฎเหล่านี้:
มีชื่อผู้ใช้ให้ 3 ชื่อ สำหรับแต่ละชื่อ ให้แสดง "Valid" ถ้าผ่านกฎทั้งสองข้อ หรือ "Invalid" ถ้าไม่ผ่านข้อใดข้อหนึ่ง
ผลลัพธ์ที่ต้องการ:
player42: Valid
ab: Invalid
hello world!: Invalidสรุป: ตารางสรุปเมธอดของสตริงใน Python
ตารางอ้างอิงแบบย่อของทุกเมธอดที่เรียนในบทนี้:
| เมธอด | ทำอะไร | ตัวอย่าง |
|---|---|---|
upper() | เป็นตัวพิมพ์ใหญ่ทั้งหมด | "hi".upper() → "HI" |
lower() | เป็นตัวพิมพ์เล็กทั้งหมด | "HI".lower() → "hi" |
title() | อักษรแรกของทุกคำเป็นตัวพิมพ์ใหญ่ | "hi there".title() → "Hi There" |
capitalize() | อักษรตัวแรกเป็นตัวพิมพ์ใหญ่ | "hi there".capitalize() → "Hi there" |
strip() | ลบช่องว่างที่ขอบ | " hi ".strip() → "hi" |
find() | ตำแหน่งของสตริงย่อย (-1 ถ้าไม่พบ) | "hello".find("ll") → 2 |
count() | นับจำนวนครั้งที่พบ | "banana".count("a") → 3 |
startswith() | ตรวจตอนต้น | "hello".startswith("he") → True |
endswith() | ตรวจตอนท้าย | "file.py".endswith(".py") → True |
replace() | สลับสตริงย่อย | "hi".replace("hi", "bye") → "bye" |
split() | แยกเป็นลิสต์ | "a,b,c".split(",") → ["a","b","c"] |
join() | ต่อลิสต์เข้าด้วยกัน | ",".join(["a","b"]) → "a,b" |
isdigit() | มีแต่ตัวเลขหรือไม่ | "123".isdigit() → True |
isalpha() | มีแต่ตัวอักษรหรือไม่ | "abc".isalpha() → True |
isalnum() | มีแต่ตัวอักษรหรือตัวเลขหรือไม่ | "abc1".isalnum() → True |
zfill() | เติมศูนย์ข้างหน้า | "42".zfill(5) → "00042" |
ไม่ต้องจำตารางนี้ สิ่งสำคัญคือรู้ว่ามีเมธอดเหล่านี้อยู่ เมื่อต้องใช้จะได้เปิดหาได้
เรียนอะไรต่อ
ในบทถัดไป การจัดรูปแบบสตริงใน Python คุณจะได้เรียนวิธีควบคุมว่าค่าต่าง ๆ จะปรากฏในสตริงอย่างไร ทั้งการจัดรูปแบบด้วย f-string การจัดตำแหน่ง การจัดรูปแบบตัวเลข และอื่น ๆ