Alternation (ตัวเลือก) และการประยุกต์ใช้
ในงานจริง เรมักใช้ regex ที่จับคู่ อย่างน้อยหนึ่งในหลายตัวเลือก หรือใช้ quantifier กับหลายๆ นิพจน์ เป้าหมายเหล่านี้ทำได้โดย:
- จัดกลุ่มด้วยวงเล็บ
() - ใช้ alternation ด้วยแถบตั้ง
|(vertical bar)
การใช้แถบตั้ง (|)
Alternation ใช้เมื่อต้องการจับคู่ ตัวใดตัวหนึ่ง จากหลายตัวเลือก ตัวอย่าง airways|airplane|bomber จะจับคู่ข้อความที่มี airways หรือ airplane หรือ bomber ได้ผลลัพธ์เดียวกันกับ air(ways|plane)|bomber
หากใช้ (airways|airplane|bomber) จะจับคู่ได้ทุกสามรูปแบบ แต่ถ้าใช้ (air(ways|plane)|bomber) จะมี capturing groups:
- ถ้าจับคู่ airways/airplane: 2 captures (กลุ่ม1: airways/airplane, กลุ่ม2: ways/plane)
- ถ้าจับคู่ bomber: 1 capture (กลุ่ม1: bomber, กลุ่ม2: ว่าง)
ปิดการ capture ด้วย ?: หลังวงเล็บเปิด: (air(?:ways|plane)|bomber) → มีเพียง 1 capture เสมอ
ตัวอย่าง
import re
s = 'airways aircraft airplane bomber'
result = re.findall(r'(airways|airplane|bomber)', s)
print(result)
# ['airways', 'airplane', 'bomber']
result2 = re.findall(r'(air(ways|plane)|bomber)', s)
print(result2)
# [('airways', 'ways'), ('airplane', 'plane'), ('bomber', '')]
result3 = re.findall(r'(air(?:ways|plane)|bomber)', s)
print(result3)
# ['airways', 'airplane', 'bomber']