ยัติภังค์ภายในเซ็ตในเรกูลาร์เอกซ์เพรสชันของ Python
ยัติภังค์ก็เป็นสัญลักษณ์พิเศษภายใน [ ]
(แต่ภายนอกไม่ใช่) หากคุณต้องการยัติภังค์เองเป็นสัญลักษณ์ - ให้วางมันในตำแหน่งที่มันจะ ไม่ถูกตีความว่าเป็นตัวแบ่งกลุ่ม
เหตุใดจึงสำคัญ: คุณอาจสร้างกลุ่มของสัญลักษณ์ขึ้นมาโดยไม่รู้ตัว ตัวอย่างเช่น แบบนี้ - '[:-@]' - คุณคิดว่าคุณกำลังเลือก colon, ยัติภังค์ และ at sign แต่จริงๆ แล้วมันกลายเป็นกลุ่มของสัญลักษณ์ระหว่าง : และ @ กลุ่มนี้ประกอบด้วยสัญลักษณ์ต่อไปนี้: ? < = > :
พวกมันมาจากไหน? จากตาราง ASCII - colon มีหมายเลขน้อยกว่า at sign - จึงได้กลุ่มออกมา นั่นคือกลุ่มทั้งหมดได้มาจากตาราง ASCII (หากต้องการคุณสามารถใช้คุณสมบัตินี้ได้)
วิธีจัดการกับเรื่องนี้: วางสัญลักษณ์ยัติภังค์ในตำแหน่งที่มันจะไม่ถูกตีความว่าเป็นสัญลักษณ์กลุ่มอย่างแน่นอน เช่น ที่เริ่มต้นหรือที่ท้ายสุด (นั่นคือหลัง [หรือก่อน
])
คุณยังสามารถ escape ยัติภังค์ได้ - แล้วมันจะหมายถึงตัวมันเองโดยไม่ขึ้นกับตำแหน่ง ตัวอย่างเช่น แทนที่จะเขียน [:-@] ให้เขียน [:\-@] - และจะไม่มีกลุ่มอีกต่อไป แต่จะมีสามสัญลักษณ์คือ colon, ยัติภังค์ และ at sign @
ตัวอย่าง
ในตัวอย่างต่อไปนี้แพตเทิร์นการค้นหาคือ:
ตัวเลข 1 ตามด้วยตัวอักษรจาก 'a' ถึง 'z' ตามด้วยตัวเลข 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! 1-2 ! !'
ตัวอย่าง
คราวนี้มา escape ยัติภังค์กัน
ผลลัพธ์แพตเทิร์นการค้นหาคือ: ตัวเลข
1 ตามด้วยตัวอักษร 'a' หรือ
ยัติภังค์ หรือตัวอักษร 'z' ตามด้วยตัวเลข
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! 1c2 !'
ตัวอย่าง
คุณสามารถแค่ย้ายตำแหน่งยัติภังค์ โดยไม่ต้อง escape มัน:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! 1c2 !'
ตัวอย่าง
ในตัวอย่างต่อไปนี้แพตเทิร์นการค้นหาคือ:
อักขระตัวแรกคือตัวอักษรพิมพ์เล็กหรือ
ยัติภังค์ '-' ตามด้วยตัวอักษร
'x' สองตัว:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! Axx ! @xx'
ตัวอย่าง
ในตัวอย่างต่อไปนี้แพตเทิร์นการค้นหาคือ:
อักขระตัวแรกคือตัวอักษรพิมพ์เล็ก พิมพ์ใหญ่
หรือยัติภังค์ '-' ตามด้วยตัวอักษร
'x' สองตัว:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! @xx'
ตัวอย่าง
คุณสามารถวางยัติภังค์ไว้ระหว่างสองกลุ่ม - ที่นั่นมันจะไม่สร้างกลุ่มเพิ่มเติมอย่างแน่นอน:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
ผลลัพธ์การทำงานของโค้ด:
'! ! ! @xx'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
txt = 'xaz xBz xcz x-z x@z'
ค้นหาสตริงทั้งหมดตามแพตเทิร์นต่อไปนี้:
ตัวอักษร 'x' ตัวอักษรพิมพ์ใหญ่หรือพิมพ์เล็ก
หรือยัติภังค์ ตัวอักษร 'z'
กำหนดสตริง:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
ค้นหาสตริงทั้งหมดตามแพตเทิร์นต่อไปนี้:
ตัวอักษร 'x' ตามด้วย dollar sign หรือ
ยัติภังค์ หรือ plus sign ตามด้วยตัวอักษร 'z'