Regular Expression (regex) เป็นวิธีการที่ใช้ในการค้นหาและจัดการกับข้อความที่ซับซ้อน โดยใช้รูปแบบที่เป็นที่ยอมรับทั่วไปในการระบุลำดับของตัวอักษรและสัญลักษณ์ในข้อความ
ใน Python เราสามารถใช้งาน regex ได้โดยการนำเข้าโมดูล re ซึ่งจะมีฟังก์ชันต่างๆ สำหรับการใช้งาน regex ได้แก่
การนำเข้าโมดูล re
import reฟังก์ชันสำคัญของ re
re.search()
ใช้ในการค้นหา match แรกที่พบในข้อความ โดยถ้าพบจะคืนค่าเป็น match object หากไม่พบจะคืนค่าเป็น None
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()}")ผลลัพธ์
Found: Python at 24
re.match()
ค้นหา match ที่ตำแหน่งเริ่มต้นของข้อความเท่านั้น หาก pattern ตรงกับจุดเริ่มต้นจึงจะคืนค่าเป็น match object
import re
text = "Hello Python"
pattern = r"Hello"
match = re.match(pattern, text)
if match:
print("Match found")
else:
print("No match")ผลลัพธ์
Match found
re.findall()
ใช้ในการค้นหาทุกๆ match ในข้อความ และจะคืนค่าเป็นลิสต์ของผลลัพธ์ทั้งหมด
import re
text = "The cat sat on the mat with another cat."
pattern = r"cat"
matches = re.findall(pattern, text)
print(matches)ผลลัพธ์
[‘cat’, ‘cat’]
re.sub()
ใช้แทนที่ข้อความตาม pattern ด้วยข้อความที่กำหนด
import re
text = "I love cats and dogs"
pattern = r"cats"
new_text = re.sub(pattern, "rabbits", text)
print(new_text)I love rabbits and dogs
re.split()
ใช้แยกข้อความตาม pattern ที่กำหนด
import re
text = "apple, banana, cherry"
pattern = r", "
fruits = re.split(pattern, text)
print(fruits)ผลลัพธ์
[‘apple’, ‘banana’, ‘cherry’]
การใช้งาน Regex Pattern
ตัวอักษรพิเศษใน regex
.: ตรงกับตัวอักษรใดๆ 1 ตัว^: ตรงกับจุดเริ่มต้นของข้อความ$: ตรงกับจุดสิ้นสุดของข้อความ*: ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน 0 หรือมากกว่า+: ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน 1 หรือมากกว่า?: ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน 0 หรือ 1{n}: ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน n ครั้ง{n,m}: ตรงกับตัวอักษรที่อยู่ข้างหน้าจำนวน n ถึง m ครั้ง
การใช้กลุ่มใน regex
เราสามารถจับกลุ่มตัวอักษรใน regex ได้โดยใช้ () เช่น
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()) # จะแสดงกลุ่มตัวเลขที่จับได้ผลลัพธ์
(‘123’, ‘456’, ‘7890’)
การใช้ character class
Character class ใช้ในการจับกลุ่มตัวอักษรหลายๆ ตัวใน regex เช่น
[a-z]: ตัวอักษรพิมพ์เล็กตั้งแต่ a ถึง z[A-Z]: ตัวอักษรพิมพ์ใหญ่ตั้งแต่ A ถึง Z[0-9]: ตัวเลขตั้งแต่ 0 ถึง 9
ตัวอย่างการใช้งาน character class
import re
text = "My ID is A1234 and B5678"
pattern = r"[A-Z]\d+"
matches = re.findall(pattern, text)
print(matches)ผลลัพธ์
[‘A1234’, ‘B5678’]
การใช้ lookahead และ lookbehind
Lookahead
ใช้เพื่อมองหาลำดับของตัวอักษรที่ต้องตามมาภายหลัง
(?=...): Lookahead เชิงบวก(?!...): Lookahead เชิงลบ
ตัวอย่าง
import re
text = "abc123xyz456"
pattern = r"\d+(?=xyz)"
matches = re.search(pattern, text)
print(matches.group())ผลลัพธ์
123
Lookbehind
ใช้เพื่อตรวจสอบลำดับตัวอักษรก่อนหน้า
(?<=...): Lookbehind เชิงบวก(?<!...): Lookbehind เชิงลบ
ตัวอย่าง
import re
text = "abc123xyz456"
pattern = r"(?<=abc)\d+"
matches = re.search(pattern, text)
print(matches.group())ผลลัพธ์
123
สรุป
การใช้งาน Regular Expression ใน Python นั้นสามารถปรับใช้กับงานค้นหา จับคู่ แยก และแทนที่ข้อความได้หลากหลายรูปแบบ ขึ้นอยู่กับรูปแบบที่เราต้องการจับ ซึ่งสามารถทำให้การจัดการข้อความที่ซับซ้อนง่ายและสะดวกมากขึ้น
