Python การใช้งาน Regular Expression

Regular Expression (regex) เป็นวิธีการที่ใช้ในการค้นหาและจัดการกับข้อความที่ซับซ้อน โดยใช้รูปแบบที่เป็นที่ยอมรับทั่วไปในการระบุลำดับของตัวอักษรและสัญลักษณ์ในข้อความ

ใน Python เราสามารถใช้งาน regex ได้โดยการนำเข้าโมดูล re ซึ่งจะมีฟังก์ชันต่างๆ สำหรับการใช้งาน regex ได้แก่

การนำเข้าโมดูล re

Python
import re

ฟังก์ชันสำคัญของ re

re.search()

ใช้ในการค้นหา match แรกที่พบในข้อความ โดยถ้าพบจะคืนค่าเป็น match object หากไม่พบจะคืนค่าเป็น None

Python
import re

text = "Welcome to the world of Python"
pattern = r"Python"

match = re.search(pattern, text)
if match:
    print(f"Found: {match.group()} at {match.start()}")

ผลลัพธ์

re.match()

ค้นหา match ที่ตำแหน่งเริ่มต้นของข้อความเท่านั้น หาก pattern ตรงกับจุดเริ่มต้นจึงจะคืนค่าเป็น match object

Python
import re

text = "Hello Python"
pattern = r"Hello"

match = re.match(pattern, text)
if match:
    print("Match found")
else:
    print("No match")

ผลลัพธ์

re.findall()

ใช้ในการค้นหาทุกๆ match ในข้อความ และจะคืนค่าเป็นลิสต์ของผลลัพธ์ทั้งหมด

Python
import re

text = "The cat sat on the mat with another cat."
pattern = r"cat"

matches = re.findall(pattern, text)
print(matches)

ผลลัพธ์

re.sub()

ใช้แทนที่ข้อความตาม pattern ด้วยข้อความที่กำหนด

Python
import re

text = "I love cats and dogs"
pattern = r"cats"

new_text = re.sub(pattern, "rabbits", text)
print(new_text)

re.split()

ใช้แยกข้อความตาม pattern ที่กำหนด

Python
import re

text = "apple, banana, cherry"
pattern = r", "

fruits = re.split(pattern, text)
print(fruits)

ผลลัพธ์

การใช้งาน Regex Pattern

ตัวอักษรพิเศษใน regex

  • . : ตรงกับตัวอักษรใดๆ 1 ตัว
  • ^ : ตรงกับจุดเริ่มต้นของข้อความ
  • $ : ตรงกับจุดสิ้นสุดของข้อความ
  • * : ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน 0 หรือมากกว่า
  • + : ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน 1 หรือมากกว่า
  • ? : ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน 0 หรือ 1
  • {n} : ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน n ครั้ง
  • {n,m} : ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน n ถึง m ครั้ง

การใช้กลุ่มใน regex

เราสามารถจับกลุ่มตัวอักษรใน regex ได้โดยใช้ () เช่น

Python
import re

text = "My phone number is 123-456-7890"
pattern = r"(\d{3})-(\d{3})-(\d{4})"

match = re.search(pattern, text)
if match:
    print(match.groups())  # จะแสดงกลุ่มตัวเลขที่จับได้

ผลลัพธ์

การใช้ character class

Character class ใช้ในการจับกลุ่มตัวอักษรหลายๆ ตัวใน regex เช่น

  • [a-z] : ตัวอักษรพิมพ์เล็กตั้งแต่ a ถึง z
  • [A-Z] : ตัวอักษรพิมพ์ใหญ่ตั้งแต่ A ถึง Z
  • [0-9] : ตัวเลขตั้งแต่ 0 ถึง 9

ตัวอย่างการใช้งาน character class

Python
import re

text = "My ID is A1234 and B5678"
pattern = r"[A-Z]\d+"

matches = re.findall(pattern, text)
print(matches)

ผลลัพธ์

การใช้ lookahead และ lookbehind

Lookahead

ใช้เพื่อมองหาลำดับของตัวอักษรที่ต้องตามมาภายหลัง

  • (?=...) : Lookahead เชิงบวก
  • (?!...) : Lookahead เชิงลบ

ตัวอย่าง

Python
import re

text = "abc123xyz456"
pattern = r"\d+(?=xyz)"

matches = re.search(pattern, text)
print(matches.group())

ผลลัพธ์

Lookbehind

ใช้เพื่อตรวจสอบลำดับตัวอักษรก่อนหน้า

  • (?<=...) : Lookbehind เชิงบวก
  • (?<!...) : Lookbehind เชิงลบ

ตัวอย่าง

Python
import re

text = "abc123xyz456"
pattern = r"(?<=abc)\d+"

matches = re.search(pattern, text)
print(matches.group())

ผลลัพธ์

สรุป

การใช้งาน Regular Expression ใน Python นั้นสามารถปรับใช้กับงานค้นหา จับคู่ แยก และแทนที่ข้อความได้หลากหลายรูปแบบ ขึ้นอยู่กับรูปแบบที่เราต้องการจับ ซึ่งสามารถทำให้การจัดการข้อความที่ซับซ้อนง่ายและสะดวกมากขึ้น

แชร์เรื่องนี้