วงเล็บที่ไม่เก็บบันทึกใน Regular Expression ของ Python
วงเล็บ ( ) ทำหน้าที่สองอย่าง -
การจัดกลุ่มตัวอักษรและหน้าที่เป็น "กลุ่มจับ" (capturing group) แล้ว
จะทำอย่างไรถ้าต้องการจัดกลุ่มแต่
ไม่ต้องการเก็บลงกลุ่มจับล่ะ? เพื่อแก้ปัญหานี้
จึงมีการคิดค้น วงเล็บที่ไม่เก็บบันทึก (?: ) ขึ้นมาโดยเฉพาะ
- มันทำหน้าที่จัดกลุ่มแต่ไม่เก็บลงกลุ่มจับ
ตัวอย่าง
ในตัวอย่างต่อไปนี้ วงเล็บคู่แรกเราต้องการ สำหรับการจัดกลุ่ม และวงเล็บคู่ที่สอง - สำหรับกลุ่มจับ อย่างไรก็ตาม วงเล็บทั้งสองแบบต่างก็เก็บบันทึก ข้อมูลลงกลุ่มจับ:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
ผลลัพธ์ในกลุ่มจับของเราจะเป็น ดังนี้:
print(res[0]) # จะได้ 'abab123'
print(res[1]) # จะได้ 'ab'
print(res[2]) # จะได้ '123'
ตัวอย่าง
มาทำให้วงเล็บคู่แรก ทำหน้าที่จัดกลุ่มเพียงอย่างเดียว แต่ไม่เก็บลงกลุ่มจับ:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
ผลลัพธ์ในกลุ่มจับแรกจะเป็นตัวเลข ของเรา:
print(res[1]) # จะได้ '123'