0Pricing
Learn AI with Python · บทเรียน

โมดูล re: search, match, findall, sub

re.search(), re.match(), re.findall(), re.sub(), re.compile() เพื่อประสิทธิภาพ

โมดูล re: search, match, findall, sub เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

โมดูล re

Python มีนิพจน์ทั่วไปให้ใช้งานผ่านโมดูลในตัว re ฟังก์ชันหลักคือ search, match, findall และ sub

การรู้ว่าควรเลือกใช้ฟังก์ชันใดถือเป็นครึ่งหนึ่งของความสำเร็จ

import re   # always import it first

re.search — ค้นหาที่ใดก็ได้

re.search(pattern, text) จะสแกนสตริงทั้งหมดเพื่อค้นหาการตรงกันครั้งแรก และส่งคืนออบเจ็กต์ Match หรือ None หากไม่พบสิ่งที่ตรงกัน

import re

m = re.search("\d+", "order 42 shipped")
if m:
    print(m.group())   # "42"
    print(m.start())   # 6

re.match — ยึดกับจุดเริ่มต้น

re.match จะตรงกันเฉพาะที่จุดเริ่มต้นของสตริงเท่านั้น หากรูปแบบไม่ได้อยู่ที่ตำแหน่ง 0 ฟังก์ชันจะส่งคืน None แม้ว่ารูปแบบนั้นจะปรากฏในภายหลังก็ตาม

import re

print(re.match("\d+", "42 items"))    # matches "42"
print(re.match("\d+", "items 42"))    # None

search เทียบกับ match

ความแตกต่างสำคัญคือ:

  • match — รูปแบบต้องเริ่มที่ดัชนี 0
  • search — รูปแบบอาจปรากฏที่ใดก็ได้

โดยส่วนใหญ่คุณต้องการใช้ search ใช้ match เฉพาะเมื่อต้องการตรวจสอบคำนำหน้าโดยเฉพาะ

re.findall — รับการตรงกันทุกรายการ

re.findall จะส่งคืนรายการของการตรงกันที่ไม่ทับซ้อนกันทั้งหมดในรูปสตริง (ไม่ใช่ออบเจ็กต์ Match) จึงเหมาะอย่างยิ่งสำหรับงานดึงข้อมูล

import re

emails = re.findall("\w+@\w+\.\w+", "a@x.com and b@y.org")
print(emails)   # ["a@x.com", "b@y.org"]

findall กับกลุ่ม

หากรูปแบบของคุณมีกลุ่มจับข้อความ findall จะส่งคืนส่วนที่จับได้แทนการตรงกันทั้งหมด ซึ่งเป็นสิ่งที่ทำให้หลายคนประหลาดใจ

ในที่นี้แต่ละทูเพิลเก็บรหัสพื้นที่และส่วนที่เหลือ

import re

print(re.findall("(\d{3})-(\d{4})", "555-1234 and 999-8765"))
# [("555", "1234"), ("999", "8765")]

re.finditer — ออบเจ็กต์ Match

เมื่อคุณต้องการตำแหน่งหรือกลุ่มของการตรงกันทุกครั้ง ให้ใช้ re.finditer ฟังก์ชันนี้จะสร้างออบเจ็กต์ Match ที่คุณวนซ้ำได้แบบประเมินค่าเมื่อจำเป็น

import re

for m in re.finditer("\d+", "a1 b22 c333"):
    print(m.group(), "at", m.start())

re.sub — ค้นหาและแทนที่

re.sub(pattern, replacement, text) จะแทนที่การตรงกันทุกครั้งด้วยสตริงแทนที่ และส่งคืนสตริงใหม่

เป็นพื้นฐานสำคัญสำหรับการทำความสะอาดข้อความ เช่น การปิดบังข้อมูล การปรับรูปแบบให้เป็นมาตรฐาน และการตัดส่วนที่ไม่ต้องการ

import re

clean = re.sub("\d+", "#", "Room 101 and 202")
print(clean)   # "Room # and #"

sub กับการอ้างอิงย้อนกลับและฟังก์ชัน

ค่าที่ใช้แทนสามารถอ้างอิงกลุ่มที่จับได้ด้วย \1 หรืออาจเป็นฟังก์ชันสำหรับตรรกะแบบไดนามิก

import re

# Swap "first last" -> "last, first"
print(re.sub("(\w+) (\w+)", "\\2, \\1", "Ada Lovelace"))

# Function replacement: double each number
print(re.sub("\d+", lambda m: str(int(m.group()) * 2), "a1 b2"))

re.compile — นำรูปแบบกลับมาใช้ใหม่

เมื่อคุณใช้รูปแบบเดิมหลายครั้ง (เช่น ในลูป) re.compile จะสร้างรูปแบบนั้นเป็นออบเจ็กต์รูปแบบที่นำกลับมาใช้ใหม่ได้เพียงครั้งเดียว วิธีนี้เร็วกว่าและอ่านได้สะอาดกว่า

import re

num = re.compile("\d+")
for line in ["a1", "b22", "c333"]:
    print(num.findall(line))

แฟล็กที่มีประโยชน์

แฟล็กจะเปลี่ยนพฤติกรรมการจับคู่:

  • re.IGNORECASE — ไม่แยกแยะตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
  • re.MULTILINE — ^/$ จับคู่กับแต่ละบรรทัด
  • re.DOTALL — . จับคู่กับอักขระขึ้นบรรทัดใหม่ได้ด้วย
import re

print(re.findall("cat", "Cat CAT cat", re.IGNORECASE))
# ["Cat", "CAT", "cat"]

ตรวจสอบด่วน: search เทียบกับ findall

คุณต้องการรายการหมายเลขโทรศัพท์ทุกหมายเลขที่ปรากฏอยู่ที่ใดก็ได้ในเอกสาร

ทบทวน: โมดูล re

ตอนนี้คุณรู้จักฟังก์ชันหลักของนิพจน์ทั่วไปแล้ว:

  • re.search — การตรงกันครั้งแรกที่ใดก็ได้ (ออบเจ็กต์ Match)
  • re.match — ตรงกันเฉพาะที่จุดเริ่มต้น
  • re.findall — รายการการตรงกันทั้งหมด (กลุ่มจะเปลี่ยนผลลัพธ์)
  • re.finditer — ออบเจ็กต์ Match พร้อมตำแหน่ง
  • re.sub — แทนที่การตรงกันด้วยการอ้างอิงย้อนกลับหรือฟังก์ชัน
  • re.compile และแฟล็กสำหรับการนำกลับมาใช้ใหม่และการควบคุม

ถัดไป: กลุ่มจับข้อความและกลุ่มแบบตั้งชื่อ

คำถามที่พบบ่อย

บทเรียน “โมดูล re: search, match, findall, sub” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โมดูล re: search, match, findall, sub” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โมดูล re: search, match, findall, sub”

re.search(), re.match(), re.findall(), re.sub(), re.compile() เพื่อประสิทธิภาพ คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “โมดูล re: search, match, findall, sub” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบนิพจน์ประจำและคลาสอักขระ
  2. โมดูล re: search, match, findall, sub
  3. กลุ่มจับและกลุ่มที่มีชื่อ
  4. การทำความสะอาดข้อความสำหรับปัญญาประดิษฐ์ด้วยนิพจน์ רגูลาร์
← กลับไปที่ Learn AI with Python