ปัญหา
ต้องแยกสตริงเป็นฟิลด์ แต่ delimiter ไม่สม่ำเสมอ (หลายตัว 섞กัน)
วิธีแก้: ใช้ re.split()
re.split() ยืดหยุ่นกว่า str.split() รองรับหลาย pattern พร้อมกัน
กรณีที่ 1: แยกเฉพาะข้อความ (ตัด delimiter ทิ้ง)
import re tennis_greats = 'Roger-federer, Rafael nadal, Novak Djokovic,Andy murray' # Pattern: [-,\s]\s* หมายถึง hyphen, comma, หรือ whitespace ตามด้วย whitespace อาจมีหรือไม่มี players = re.split(r'[-,\s]\s*', tennis_greats) print(players) # ['Roger', 'federer', 'Rafael', 'nadal', 'Novak', 'Djokovic', 'Andy', 'murray']
กรณีที่ 2: แยกข้อความพร้อมเก็บ delimiter ด้วย
ใช้ capturing group (...) รอบ delimiter
players = re.split(r'(-|,|\s)\s*', tennis_greats) print(players) # ['Roger', '-', 'federer', ',', 'Rafael', ' ', 'nadal', ',', 'Novak', ' ', 'Djokovic', ',', 'Andy', ' ', 'murray']
อธิบาย Regular Expression
| Pattern | ความหมาย |
|---|---|
[-,\s] | Character class: hyphen, comma, หรือ whitespace |
\s* | Whitespace 0 หรือมากกว่า |
(-|,|\s) | Capturing group: เก็บ delimiter ไว้ในผลลัพธ์ |
เมื่อไหร่ควรใช้ re.split()?
- Delimiter หลายตัวและไม่สม่ำเสมอ
- ต้องการเก็บ delimiter ไว้ด้วย
- Pattern ซับซ้อน (เช่น multiple spaces, tabs, mixed punctuation)
ตัวอย่างเพิ่มเติม
# แยกวันที่หลายรูปแบบ dates = "2023-01-15, 2023/02/20; 2023.03.25" re.split(r'[-/.;]\s*', dates) # ['2023', '01', '15', '2023', '02', '20', '2023', '03', '25']