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