การจัดการหลายบรรทัดใน Regular Expression ของ Python
Regular expression เมื่อทำงานกับข้อความหลายบรรทัด มีลักษณะเฉพาะของตัวเอง มาลองศึกษา ด้วยตัวอย่างจากข้อความต่อไปนี้ ซึ่งประกอบด้วยตัวอักษรธรรมดา, อักขระขึ้นบรรทัดใหม่ และแท็บ:
txt = '''111
222
333
444'''
อักขระขึ้นบรรทัดใหม่
อักขระขึ้นบรรทัดใหม่สามารถจับได้ด้วย
คำสั่ง '\n':
res = re.sub('\n', '!', txt)
print(res)
ผลลัพธ์ที่ได้จะเป็นข้อความดังต่อไปนี้ (ช่องว่างระหว่างบรรทัดคือแท็บ):
'111! 222! 333! 444'
แท็บ
อักขระแท็บสามารถจับได้ด้วย
คำสั่ง '\t':
res = re.sub('\t', '!', txt)
print(res)
ผลลัพธ์จากการรันโค้ด:
'''
!111
!222
!333
!444
'''
การทำงานของจุด
คำสั่ง '.' สำหรับข้อความหลายบรรทัด
จะไม่จับอักขระขึ้นบรรทัดใหม่:
res = re.sub('.', '!', txt)
print(res)
ผลลัพธ์จากการรันโค้ด:
'''
!!!
!!!!
!!!!
!!!!
'''
อักขระใดๆ
เพื่อจับอักขระทั้งหมดในข้อความหลายบรรทัด
มีเทคนิคพิเศษคือการใช้การรวม [\s\S] โครงสร้างดังกล่าว
จะค้นหาตัวอักษรธรรมดาทุกตัวและการขึ้นบรรทัดใหม่ทั้งหมด:
res = re.sub('[\s\S]', '!', txt)
print(res)
ผลลัพธ์จากการรันโค้ด:
'!!!!!!!!!!!!!!!!!!'
ดอลลาร์
คำสั่ง '$' ในโหมดหลายบรรทัด
จะจับจุดสิ้นสุดของแต่ละบรรทัด:
res = re.sub('$', '!', txt)
print(res)
ผลลัพธ์จากการรันโค้ด:
'''
111!
222!
333!
444!
'''
โจทย์ฝึกปฏิบัติ
กำหนดข้อความ:
'''
abc
def
ghi
jkl
'''
เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:
'''
abc!
def!
ghi!
jkl!
'''
กำหนดข้อความ:
'''
abc
def
ghi
jkl
'''
เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:
'''
! abc
! def
! ghi
! jkl
'''
กำหนดข้อความ:
'''
abc
def
ghi
jkl
'''
เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:
'''!
abc
def
ghi
jkl
!'''
กำหนดข้อความ:
'''
abc
def
ghi
jkl
'''
เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:
'''!
! abc
! def
! ghi
! jkl
!'''
กำหนดข้อความ:
'''
abc
def
ghi
jkl
'''
เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:
'''!
abc!
def!
ghi!
jkl!
!'''
กำหนดข้อความ:
'''
abc
def
ghi
jkl
'''
เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:
'''
!abc
!def
!ghi
!jkl
'''