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

การจับคู่ Word (คำ) ใน Python Regex ด้วย Lookaround Assertions

ใช้ 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 หรือ underscore
  • meeting - คำที่ต้องการจับคู่
  • (?=[\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_]