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