คำสั่ง 'หรือ' ใน Regular Expressions Python
คำสั่ง '|' ซึ่งแสดงถึง
ตัวเลือก 'หรือ' ที่ทรงพลังยิ่งกว่า
เมื่อเทียบกับคำสั่ง [ ] คำสั่งนี้
อนุญาตให้แบ่ง regular expression ออกเป็นหลายๆ
ส่วน โดยที่สิ่งที่ค้นหาอาจตรงกับ
ส่วนหนึ่งของ regex หรืออีกส่วนหนึ่งก็ได้
มาดูตัวอย่างกัน
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหาคือ:
ตัวอักษร 'a' สามตัว หรือตัวอักษร
'b' สามตัว:
txt = 'aaa bbb abb'
res = re.sub('a{3}|b{3}', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! abb'
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหาคือ:
ตัวอักษร 'a' สามตัว หรือตั้งแต่
1 ตัวขึ้นไปของตัวอักษร
'b':
txt = 'aaa bbb bbbb bbbbb axx'
res = re.sub('a{3}|b+', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! ! axx'
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหาคือ: ตัวอักษรหนึ่งตัวหรือมากกว่า หรือตัวเลขสามหลัก:
txt = 'a ab abc 1 12 123'
res = re.sub('[a-z]+|\d{3}', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! 1 12 !'
ตัวอย่าง
เครื่องหมายเส้นตั้งสามารถแบ่ง regular expression ได้ไม่เพียงสองส่วน แต่สามารถแบ่งเป็นจำนวนเท่าใดก็ได้:
txt = 'aaa bbb ccc ddd'
res = re.sub('a+|b+|c+', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! ddd'
ตัวอย่าง
หากเครื่องหมายเส้นตั้งอยู่ภายในวงเล็บ
คำสั่ง 'หรือ' จะทำงาน
เฉพาะภายในวงเล็บเหล่านั้น
ตัวอย่าง ลองค้นหาสตริงตาม
รูปแบบต่อไปนี้: เริ่มต้นด้วย
'a' หรือ 'b' หนึ่งครั้งหรือมากกว่า
จากนั้นตามด้วยตัวอักษร 'x' สองตัว:
txt = 'axx bxx bbxx exx'
res = re.sub('(a|b+)xx', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! exx'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
txt = 'aeeea aeea aea axa axxa axxxa'
เขียน regular expression ที่จะค้นหาสตริง
ตามรูปแบบ: ที่ขอบทั้งสองด้านเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษร
'e' จำนวนกี่ครั้งก็ได้ หรือตัวอักษร
'x' จำนวนกี่ครั้งก็ได้
กำหนดสตริง:
txt = 'aeeea aeea aea axa axxa axxxa'
เขียน regular expression ที่จะค้นหาสตริง
ตามรูปแบบ: ที่ขอบทั้งสองด้านเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษร
'e' สองครั้ง หรือตัวอักษร 'x'
จำนวนกี่ครั้งก็ได้