การจัดการหลายบรรทัดใน 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!
'''

โจทย์ฝึกปฏิบัติ

Задание 1

กำหนดข้อความ:

python'''
  abc
  def
  ghi
  jkl
'''

เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:

python'''
  abc!
  def!
  ghi!
  jkl!
'''
Задание 2

กำหนดข้อความ:

python'''
  abc
  def
  ghi
  jkl
'''

เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:

python'''
!  abc
!  def
!  ghi
!  jkl
'''
Задание 3

กำหนดข้อความ:

python'''
  abc
  def
  ghi
  jkl
'''

เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:

python'''!
  abc
  def
  ghi
  jkl
!'''
Задание 4

กำหนดข้อความ:

python'''
  abc
  def
  ghi
  jkl
'''

เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:

python'''!
!  abc
!  def
!  ghi
!  jkl
!'''
Задание 5

กำหนดข้อความ:

python'''
  abc
  def
  ghi
  jkl
'''

เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:

python'''!
  abc!
  def!
  ghi!
  jkl!
!'''
Задание 6

กำหนดข้อความ:

python'''
  abc
  def
  ghi
  jkl
'''

เขียน regular expression ที่จะเปลี่ยน ข้อความนี้ให้เป็นดังนี้:

python'''
  !abc
  !def
  !ghi
  !jkl
'''