Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีแยกสตริงด้วยหลาย Delimiter ใน Python (re.split)

ปัญหา

ต้องแยกสตริงเป็นฟิลด์ แต่ 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']