ใช้ Positive Lookbehind (?<=...) และ Positive Lookahead (?=...) เพื่อจับคู่คำเฉพาะ โดยเคารพอักขระรอบข้างแต่ ไม่รวมอักขระเหล่านั้นในผลลัพธ์
ตัวอย่าง: จับคู่คำว่า 'meeting' ใน URL
import re s = "https://www.google.com/meeting_agenda_minutes.html" result = re.findall(r'(?<=[\W_])meeting(?=[\W_])', s) print(result)
ผลลัพธ์
['meeting']
คำอธิบายรูปแบบ (?<=[\W_])meeting(?=[\W_])
(?<=[\W_])- Positive lookbehind: ตรงหน้าต้องเป็น non-word หรือ underscoremeeting- คำที่ต้องการจับคู่(?=[\W_])- Positive lookahead: ตรงหลังต้องเป็น non-word หรือ underscore
ดังนั้น จะจับคู่ "meeting" เฉพาะที่อยู่ระหว่าง word boundaries (คั่นด้วย non-word หรือ _) เช่น:
meeting_agenda→ จับคู่ "meeting" ✓ (หน้าเป็น / หรือต้นสตริง, หลังเป็น _)meeting(คำเดี่ยว) → จับคู่ ✓meetingroom→ ไม่จับคู่ (หลังเป็น 'r' ซึ่งเป็น word char)
เปรียบเทียบกับ \b (Word Boundary)
>> re.findall(r'\bmeeting\b', 'meeting_agenda') [] # _ ถือเป็น word char → \b ไม่จับคู่ระหว่าง meeting และ _ >>> re.findall(r'(?<=[\W_])meeting(?=[\W_])', 'meeting_agenda') ['meeting'] # Lookaround จับคู่ได้เพราะ _ อยู่ใน [\W_]