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

การทำงานของ Alternation (|) ใน Regular Expression ของ Python

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']