ใช้ Negative Lookahead (?!...) เพื่อระบุว่า "อย่าจับคู่ถ้าตรงตามรูปแบบนี้ต่อไป"
การวิเคราะห์รูปแบบ ^(?!2{1,2}5).*
| ส่วน | ความหมาย |
|---|---|
^ | ต้นสตริง |
(?!2{1,2}5) | Negative lookahead: ไม่จับคู่ถ้าตรงนี้ตามด้วย 2 จำนวน 1-2 ตัว แล้วตามด้วย 5 |
.* | จับคู่อักขระใดๆ 0 ตัวขึ้นไป (ส่วนที่เหลือ) |
ตัวอย่าง
import re
foo = '2249678'
foo2 = '2259678'
result = re.findall(r'^(?!2{1,2}5).*', foo)
result2 = re.findall(r'^(?!2{1,2}5).*', foo2)
print(result) # ['2249678']
print(result2) # []
ผลลัพธ์
['2249678'] []
คำอธิบาย
2249678: เริ่มต้นด้วย "224" → ไม่ใช่ "22" หรือ "2" ตามด้วย "5" → ผ่าน lookahead → จับคู่ทั้งสตริง2259678: เริ่มต้นด้วย "225" → ตรงกับ "2{1,2}5" (คือ "22" + "5") → lookahead ล้มเหลว → ไม่จับคู่