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

วิธีไม่ให้จับคู่อักขระหลังการซ้ำใน Python Regex (Negative Lookahead)

ใช้ 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 ล้มเหลว → ไม่จับคู่