วงเล็บปีกกาในนิพจน์ทั่วไปของ Python
โอเปอเรเตอร์ '+', '*', '?'
นั้นใช้งานได้ดี อย่างไรก็ตาม ไม่สามารถระบุ
จำนวนการทำซ้ำที่แน่นอนได้ด้วยโอเปอเรเตอร์เหล่านี้ ในกรณีนี้
โอเปอเรเตอร์ {} จะมาช่วยคุณ
มันทำงานดังนี้: {5}
- ทำซ้ำห้าครั้ง, {2,5} – ทำซ้ำ
จากสองถึงห้าครั้ง (รวมทั้งสองจำนวน), {2,}
- ทำซ้ำสองครั้งขึ้นไป ดู
ตัวอย่าง:
ตัวอย่าง
ในตัวอย่างนี้ แพตเทิร์นการค้นหาคือ
ดังนี้: ตัวอักษร 'x', ตัวอักษร 'a'
หนึ่งหรือสองครั้ง, ตัวอักษร 'x':
txt = 'xx xax xaax xaaax'
res = re.sub('xa{1,2}x', '!', txt)
print(res)
ผลลัพธ์ของการรันโค้ด:
'xx ! ! xaaax'
ตัวอย่าง
ในตัวอย่างนี้ แพตเทิร์นการค้นหาคือ
ดังนี้: ตัวอักษร 'x', ตัวอักษร 'a'
สองครั้งขึ้นไป, ตัวอักษร 'x':
txt = 'xx xax xaax xaaax'
res = re.sub('xa{2,}x', '!', txt)
print(res)
ผลลัพธ์ของการรันโค้ด:
'xx xax ! !'
ตัวอย่าง
ในตัวอย่างนี้ แพตเทิร์นการค้นหาคือ
ดังนี้: ตัวอักษร 'x', ตัวอักษร 'a'
สามครั้ง, ตัวอักษร 'x':
txt = 'xx xax xaax xaaax'
res = re.sub('xa{3}x', '!', txt)
print(res)
ผลลัพธ์ของการรันโค้ด:
'xx xax xaax !'
ตัวอย่าง
ในตัวอย่างนี้ แพตเทิร์นการค้นหาคือ
ดังนี้: ตัวอักษร 'a' สิบครั้ง:
txt = 'aaa aaaaaaaaaa aaa'
res = re.sub('a{10}', '!', txt)
print(res)
ผลลัพธ์ของการรันโค้ด:
'aaa ! aaa'
ตัวอย่าง
ในตัวอย่างนี้ มีแพตเทิร์นดังนี้: ตัวอักษร
'x', ตัวอักษร 'a' สามครั้งหรือน้อยกว่า, ตัวอักษร 'x' เพื่อที่จะ
ทำให้เป็นจริง ก่อนตัวเลข 3
สามารถไม่ระบุตัวเลข แต่ใส่
เพียงเครื่องหมายจุลภาค:
txt = 'xx xax xaax xaaax'
res = re.sub('xa{,3}x', '!', txt)
print(res)
ผลลัพธ์ของการรันโค้ด:
'! ! ! !'
ตัวอย่าง
ศูนย์ก่อน 3 ก็เป็นที่อนุญาตเช่นกัน:
txt = 'xx xax xaax xaaax'
res = re.sub('xa{0,3}x', '!', txt)
print(res)
ผลลัพธ์ของการรันโค้ด:
'! ! ! !'
โจทย์ปัญหาปฏิบัติ
กำหนดสตริง:
txt = 'aa aba abba abbba abbbba abbbbba'
เขียนนิพจน์ทั่วไปที่ค้นหาสตริง
'abba', 'abbba', 'abbbba'
และเฉพาะพวกมันเท่านั้น
กำหนดสตริง:
txt = 'aa aba abba abbba abbbba abbbbba'
เขียนนิพจน์ทั่วไปที่ค้นหาสตริง
รูปแบบ 'aba' ซึ่ง 'b'
ปรากฏน้อยกว่า 3 ครั้ง (รวม)
กำหนดสตริง:
txt = 'aa aba abba abbba abbbba abbbbba'
เขียนนิพจน์ทั่วไปที่ค้นหาสตริง
รูปแบบ 'aba' ซึ่ง 'b'
ปรากฏมากกว่า 4 ครั้ง (รวม)