ทั้ง re.match() และ re.search() เป็นเมธอดของโมดูล re แต่มีขอบเขตการค้นหาต่างกัน
re.match() - จับคู่เฉพาะต้นสตริง
ค้นหา pattern เฉพาะที่ตำแหน่งเริ่มต้นของสตริง เท่านั้น
>> import re >>> result = re.match(r'TP', 'TP Tutorials Point TP') >>> result.group(0) 'TP' >>> re.match(r'Tutorials', 'TP Tutorials Point TP') None # ไม่เจอ เพราะไม่ได้อยู่ต้นสตริง
re.search() - จับคู่ทุกตำแหน่ง
ค้นหา pattern ทุกตำแหน่งในสตริง คืน match แรกที่เจอ
>> import re >>> result = re.search(r'Tutorials', 'TP Tutorials Point TP') >>> result.group(0) 'Tutorials' >>> re.search(r'TP', 'TP Tutorials Point TP').group(0) 'TP' # เจอที่ต้นสตริง (match แรก)
ตารางเปรียบเทียบ
| คุณสมบัติ | re.match() | re.search() |
|---|---|---|
| ตำแหน่งค้นหา | ต้นสตริงเท่านั้น | ทุกตำแหน่ง |
| คืนค่า | Match object หรือ None | Match object หรือ None |
| ใช้เมื่อ | ต้องการตรวจสอบ prefix/format | ค้นหา pattern ที่ไหนก็ได้ในสตริง |
| ประสิทธิภาพ | เร็วกว่า (ตรวจสอบจุดเดียว) | ช้ากว่า (สแกนทั้งสตริง) |
fullmatch() (Python 3.4+)
จับคู่ สตริงทั้งหมด ต้องตรง pattern ทุกส่วน
>> re.fullmatch(r'\d{3}-\d{4}', '123-4567')
>>> re.fullmatch(r'\d{3}-\d{4}', '123-4567 extra')
None