โมดูล 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 firstre.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()) # 6re.match — ยึดกับจุดเริ่มต้น
re.match จะตรงกันเฉพาะที่จุดเริ่มต้นของสตริงเท่านั้น หากรูปแบบไม่ได้อยู่ที่ตำแหน่ง 0 ฟังก์ชันจะส่งคืน None แม้ว่ารูปแบบนั้นจะปรากฏในภายหลังก็ตาม
import re
print(re.match("\d+", "42 items")) # matches "42"
print(re.match("\d+", "items 42")) # Nonesearch เทียบกับ match
ความแตกต่างสำคัญคือ:
match— รูปแบบต้องเริ่มที่ดัชนี 0search— รูปแบบอาจปรากฏที่ใดก็ได้
โดยส่วนใหญ่คุณต้องการใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบนิพจน์ประจำและคลาสอักขระ
- โมดูล re: search, match, findall, sub
- กลุ่มจับและกลุ่มที่มีชื่อ
- การทำความสะอาดข้อความสำหรับปัญญาประดิษฐ์ด้วยนิพจน์ רגูลาร์