การใช้กรุ๊ปแทนที่ในสตริง replacement ใน Python
เมื่อทำงานกับเมธอด sub หากต้องการนำเนื้อหาจากกรุ๊ปใน regular expression ไปใช้
ในสตริง replacement คุณสามารถแทรกเนื้อหาของกรุ๊ปนั้นโดยใช้แบ็กสแลชคู่ \
ตามด้วยหมายเลขกรุ๊ป ตัวอย่างเช่น \1 -
คือกรุ๊ปแรก, \2 คือกรุ๊ปที่สอง
และเป็นต้นไป
เพื่อให้เข้าใจความจำเป็นและวิธีการใช้งาน ลองมาดูจากตัวอย่างกัน
ตัวอย่าง
ลองหาตัวเลขทั้งหมดและแทนที่ตัวเลขเหล่านั้น ด้วยตัวเลขเดียวกันแต่อยู่ในวงเล็บกลม เพื่อทำสิ่งนี้ เราจะแทนที่ตัวเลขทั้งหมดที่พบด้วย ตัวเลขเดียวกันแต่อยู่ในวงเล็บ:
txt = '1 23 456 xax'
res = re.sub('(\d+)', '(\1)', txt)
print(res)
ผลลัพธ์ที่ได้ในตัวแปรจะเป็น ดังนี้:
'(1) (23) (456) xax'
ตัวอย่าง
ลองหาสตริงทั้งหมดที่แทน
ตัวเลขที่มี 'x' อยู่รอบด้าน และแทนที่ตัวเลขเหล่านั้น
ด้วยตัวเลขเดียวกัน แต่มีเครื่องหมาย '!'
อยู่รอบด้าน:
txt = 'x1x x23x x456x xax'
res = re.sub('x(\d+)x', '!\1!', txt)
print(res)
ผลลัพธ์ที่ได้ในตัวแปรจะเป็น ดังนี้:
'!1! !23! !456! xax'
ตัวอย่าง
ลองแก้ปัญหาต่อไปนี้: ให้สตริง
'aaa@bbb ccc@ddd' - ตัวอักษร
ตามด้วยเครื่องหมาย @ ตามด้วยตัวอักษรอีกครั้ง ต้องสลับตำแหน่ง
ตัวอักษรในส่วนของสตริง 'aaa@bbb'
ก่อน '@' และหลัง:
txt = 'aaa@bbb ccc@ddd'
res = re.sub('([a-z]+)@([a-z]+)', '\2@\1', txt)
print(res)
ผลลัพธ์ที่ได้ในตัวแปรจะเป็น ดังนี้:
'bbb@aaa ccc@ddd'
โจทย์ฝึกปฏิบัติ
ให้สตริง:
txt = '12 34 56 78'
สลับตำแหน่งตัวเลขในตัวเลขสองหลักทั้งหมด
ให้สตริงวันที่:
txt = '31.12.2025'
แปลงวันที่นี้เป็น '2025.12.31'