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

ความแตกต่างระหว่าง re.search และ re.match ใน Python

ทั้ง 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 หรือ NoneMatch 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