ชุดอักขระในนิพจน์ทั่วไปของ Python
กลุ่มอักขระ \d และ \w นั้น
ไม่ยืดหยุ่นมากนัก แม้แต่งานง่าย ๆ
อย่าง ค้นหาตัวอักษรทั้งหมด แต่ไม่ใช่ตัวเลข -
ก็ไม่สามารถแก้ไขได้ด้วยกลุ่มเหล่านี้ สำหรับงานดังกล่าว
ควรใช้วงเล็บเหลี่ยมแทน
ซึ่งแสดงถึงตัวดำเนินการ 'หรือ'
วงเล็บเหลี่ยมจะแทนที่อักขระหนึ่งตัว
ซึ่งเป็นตัวใดก็ได้ที่ระบุไว้ภายใน ตัวอย่างเช่น
แบบนี้: x[abc]x - เรา
กำลังบอกว่าที่ขอบทั้งสองด้านต้องเป็นตัวอักษร
x และตรงกลาง - เป็นอักขระหนึ่งตัว: อาจเป็น 'a',
หรือ 'b', หรือ 'c'
หลังจากวงเล็บเหลี่ยม คุณสามารถเขียน
ตัวดำเนินการทำซ้ำได้ ตัวอย่างเช่น
แบบนี้: x[abc]+x - เรา
กำลังบอกว่าภายในตัว x
สามารถมีอักขระ 'a', 'b' และ 'c' จำนวนเท่าใดก็ได้ -
ในรูปแบบผสมใดก็ได้
คุณไม่เพียงแต่สามารถระบุอักขระได้เท่านั้น แต่ยัง
สามารถสร้างกลุ่มอักขระได้ โดยเขียนระหว่าง
อักขระสองตัวด้วยเครื่องหมายขีดกลาง ตัวอย่างเช่น
แบบนี้: [a-d] - เรา
จะได้อักขระทั้งหมดตั้งแต่
'a' ถึง 'd'
ลองดูตัวอย่างกัน
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรใด ๆ ตั้งแต่
'a' ถึง 'z':
ผลลัพธ์การทำงานของโค้ด:
'! ! ! x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรใด ๆ ตั้งแต่
'a' ถึง 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! xmx x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรใด ๆ ตั้งแต่
'A' ถึง 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'xax ! xcx x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวเลขใด ๆ ตั้งแต่ 0
ถึง 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'xax ! ! ! x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวเลขใด ๆ ตั้งแต่ 3
ถึง 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'xax x1x ! ! x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรใด ๆ ตั้งแต่
'a' ถึง 'z' หรือตัวเลขตั้งแต่
1 ถึง 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! ! x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรใด ๆ ตั้งแต่
'a' ถึง 'z' หรือตัวอักษรตั้งแต่
'A' ถึง 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! x5x x@x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรใด ๆ ตั้งแต่
'a' ถึง 'z' หรือตัวเลข 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! ! x3x'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาดูเหมือน
ดังนี้: ระหว่างตัว x คือตัวอักษรตั้งแต่ 'a'
ถึง 'z' โดยมีจำนวนตั้งแต่ 1
ตัวขึ้นไป:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'xx ! ! ! x123x xa3x'
ตัวอย่าง
มาทำให้จำนวนตัวอักษรสามารถเป็นศูนย์ได้:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
ผลลัพธ์ที่เราได้:
'! ! ! ! x123x xa3x'
ตัวอย่าง
ภายในวงเล็บเหลี่ยมยังสามารถระบุ อักขระที่ถูกหนีได้ด้วย มาค้นหาลำดับของตัวอักษรและตัวเลข ที่ซ้ำกันศูนย์ครั้งหรือมากกว่านั้น:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! x@x ! ! !'
ตัวอย่าง
หากเราต้องการระบุวงเล็บเหลี่ยมอีกชุดหนึ่ง เราก็ต้องหนีมันด้วย:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! x3x'
โจทย์ฝึกหัด
ให้สตริง:
txt = 'aba aea aca aza axa'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษร 'b',
'e' หรือ 'x'
ให้สตริง:
txt = 'a1a a3a a7a a9a aba'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวเลขตั้งแต่
3 ถึง 6
ให้สตริง:
txt = 'aba aea afa aha aga'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษรตั้งแต่
'a' ถึง 'g'
ให้สตริง:
txt = 'aba aea afa aha aga'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษรตั้งแต่
'a' ถึง 'f' และตั้งแต่ 'j'
ถึง 'z'
ให้สตริง:
txt = 'aAa aea aEa aJa a3a'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษรตั้งแต่
'a' ถึง 'f' และตั้งแต่ 'A'
ถึง 'D'
ให้สตริง:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษรภาษาอังกฤษตัวเล็ก
โดยไม่กระทบกับส่วนอื่น
ให้สตริง:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษรภาษาอังกฤษตัวเล็กและ
ตัวใหญ่ โดยไม่กระทบกับส่วนอื่น
ให้สตริง:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
เขียนนิพจน์ทั่วไปที่ค้นหาตาม
รูปแบบต่อไปนี้: ที่ขอบเป็นตัวอักษร
'a' และระหว่างนั้น - เป็นตัวอักษรภาษาอังกฤษตัวเล็ก
และตัวเลข โดยไม่กระทบกับส่วนอื่น