นิพจน์ทั่วไปใน Python [พร้อมตัวอย่าง]: จะนำไปใช้อย่างไร
เผยแพร่แล้ว: 2021-01-29ขณะประมวลผลข้อมูลดิบจากแหล่งใดๆ การดึงข้อมูลที่ถูกต้องเป็นสิ่งสำคัญเพื่อให้ได้รับข้อมูลเชิงลึกที่มีความหมายจากข้อมูล บางครั้งก็ยากที่จะเอารูปแบบเฉพาะออกจากข้อมูลโดยเฉพาะในกรณีของข้อมูลที่เป็นข้อความ
ข้อมูลที่เป็นข้อความประกอบด้วยย่อหน้าของข้อมูลที่รวบรวมผ่านแบบฟอร์มการสำรวจ เว็บไซต์ที่คัดลอกมา และแหล่งข้อมูลอื่นๆ Channing ของตัวเข้าถึงสตริงต่างๆ ที่มีฟังก์ชัน pandas หรือฟังก์ชันแบบกำหนดเองอื่นๆ สามารถทำงานได้สำเร็จ แต่ถ้าจำเป็นต้องได้รับรูปแบบที่เฉพาะเจาะจงมากขึ้นล่ะ นิพจน์ทั่วไปทำงานนี้ได้อย่างง่ายดาย
สารบัญ
นิพจน์ทั่วไป (RegEx) คืออะไร?
นิพจน์ทั่วไปคือการแสดงชุดอักขระสำหรับสตริง นำเสนอสูตรทั่วไปสำหรับรูปแบบเฉพาะในสตริง ซึ่งช่วยในการแยกข้อมูลที่ถูกต้องออกจากกลุ่มข้อมูล นิพจน์มักจะประกอบด้วยสัญลักษณ์หรืออักขระที่ช่วยในการสร้างกฎ แต่ในแวบแรก อาจดูแปลกและเข้าใจยาก สัญลักษณ์เหล่านี้มีความหมายที่เกี่ยวข้องซึ่งอธิบายไว้ที่นี่
เรียนรู้ หลักสูตรวิทยาศาสตร์ข้อมูล จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
อักขระ Meta ใน RegEx
- '.': เป็นไวด์การ์ด จับคู่อักขระตัวเดียว (อักขระใดก็ได้ แต่เพียงครั้งเดียว)
- ^: หมายถึงจุดเริ่มต้นของสตริง
- $: หมายถึงจุดสิ้นสุดของสตริง
- [ ]: จับคู่หนึ่งในชุดอักขระภายใน [ ]
- [az]: จับคู่หนึ่งในช่วงของอักขระ a,b,…,z
- [^abc] : จับคู่อักขระที่ไม่ใช่ a,b หรือ c
- a|b: จับคู่ a หรือ b โดยที่ a และ b เป็นสตริง
- () : กำหนดขอบเขตสำหรับตัวดำเนินการ
- \ : เปิดใช้งาน Escape สำหรับอักขระพิเศษ (\t, \n, \b, \.)
- \b: จับคู่ขอบเขตของคำ
- \d : ตัวเลขใด ๆ เทียบเท่ากับ [0-9]
- \D: ใดๆ ที่ไม่ใช่ตัวเลข เทียบเท่ากับ [^0-9]
- \s : ช่องว่างใด ๆ เทียบเท่ากับ [ \t\n\r\f\v]
- \S : ใดๆ ที่ไม่ใช่ช่องว่าง เทียบเท่ากับ [^\t\n\r\f\v]
- \w : ตัวอักษรและตัวเลขใดๆ เทียบเท่ากับ [a-zA-Z0-9_]
- \W : ที่ไม่ใช่ตัวอักษรและตัวเลข เทียบเท่ากับ [^a-zA-Z0-9_]
- '*': จับคู่ 0 รายการขึ้นไป
- '+': จับคู่อย่างน้อยหนึ่งรายการ
- '?': จับคู่ศูนย์หรือหนึ่งรายการ
- {n}: ซ้ำ n ครั้ง, n>=0
- {n,}: ซ้ำอย่างน้อย n ครั้ง
- {,n}: ไม่เกิน n ครั้ง
- {m,n}: อย่างน้อย m การซ้ำซ้อนและการซ้ำซ้อนสูงสุด n ครั้ง
ตัวอย่างเพื่อทำความเข้าใจวิธีแก้ปัญหา
เมื่อคุณทราบเกี่ยวกับอักขระที่ประกอบเป็น RegEx แล้ว เรามาดูวิธีการทำงานกัน:
1. การกรองอีเมล:
สมมติว่าคุณต้องการกรองรหัสอีเมลทั้งหมดออกจากย่อหน้ายาว รูปแบบทั่วไปของอีเมลคือ:
ชื่อผู้ใช้@domain_name. <top_level_domain>
ชื่อผู้ใช้สามารถเป็นตัวอักษรและตัวเลขได้ ดังนั้นเราจึงสามารถใช้ \w เพื่อระบุได้ แต่มีความเป็นไปได้ที่ผู้ใช้จะสร้างบัญชีเป็น firstName.surname เพื่อแก้ไขปัญหานี้ เราจะหลีกหนีจากจุดนั้นและสร้างชุดอักขระ ถัดไป domain_name ควรเป็นตัวอักษรเท่านั้น ดังนั้น A-Za-z จะแสดงว่า โดเมนระดับบนสุดมักจะเป็น .com, .in, .org แต่ขึ้นอยู่กับกรณีการใช้งาน คุณสามารถเลือกช่วงตัวอักษรทั้งหมดหรือกรองโดเมนเฉพาะ
นิพจน์ทั่วไปของสิ่งนี้จะมีลักษณะดังนี้:
^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$
ที่นี่จะมีการประกาศจุดเริ่มต้นและจุดสิ้นสุดของรูปแบบด้วยเช่นกัน โดเมนระดับบนสุดสามารถมีอักขระได้ 2-4 ตัวเท่านั้น นิพจน์ทั้งหมดมี 3 กลุ่ม
2. การกรองวันที่:
ข้อมูลที่เป็นข้อความที่คุณกำลังดึงออกมาอาจมีวันที่และไม่มีคอลัมน์แยกต่างหากสำหรับคุณ วันที่เป็นปัจจัยสำคัญที่ช่วยในการกรองข้อมูลหรือการวิเคราะห์อนุกรมเวลา วันที่เฉพาะจะใช้รูปแบบของวันที่/เดือน/ปี โดยที่วันที่และเดือนสามารถแลกเปลี่ยนกันได้
นอกจากนี้ เดือนสามารถเป็นตัวเลขและรูปแบบตัวอักษรและในตัวอักษรได้ทั้งตัวย่อหรือชื่อเต็ม ส่วนใหญ่ขึ้นอยู่กับจำนวนกรณีที่มีอยู่ในข้อมูลของเรา และสามารถทำได้โดยการโจมตีและการทดลองใช้เท่านั้น

RegEx อย่างง่ายที่ครอบคลุมวันที่ต่างๆ แสดงไว้ด้านล่าง:
^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$
รูปแบบนี้จะบันทึกรูปแบบวันที่ด้วยยัติภังค์หรือเครื่องหมายทับ วันที่และเดือนจำกัดไว้ที่หนึ่งหรือสองหลัก และปีไม่เกินสี่หลัก เอนทิตีที่เกี่ยวข้องจะถูกจับเป็นกลุ่มที่เป็นทางเลือกในกรณีนี้
อ่านเพิ่มเติม: แนวคิดและหัวข้อโครงการ Python
จะนำไปใช้ใน Python ได้อย่างไร?
นิพจน์ทั่วไปที่เราเพิ่งสร้างขึ้นนั้นเป็นไปตามเกณฑ์ที่เราคิดไว้ และตอนนี้ก็ถึงเวลาที่จะนำไปใช้ในโค้ด Python Python มีโมดูลในตัวที่เรียกว่า re module ที่ใช้การทำงานของนิพจน์เหล่านี้ อย่างง่าย,
นำเข้าอีกครั้ง
รูปแบบ = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'
โมดูล Re มีฟังก์ชันที่หลากหลายและทุกฟังก์ชันมีกรณีการใช้งานที่แตกต่างกัน มาดูหน้าที่ที่สำคัญบางประการกัน:
- re.findall(): ฟังก์ชันนี้จะคืนค่ารายการของการจับคู่ทั้งหมดในสตริงทดสอบตามรูปแบบที่ส่ง พิจารณาตัวอย่างนี้:
string = '25-12-1999 สุ่มข้อความที่นี่ 25/12/1999'
พิมพ์ (re.findall(รูปแบบ, สตริง))
จะส่งกลับเฉพาะวันที่จากสตริงในรายการ
- re.sub(): Sub ในฟังก์ชันนี้ย่อมาจาก substitution และทำสิ่งเดียวกัน มันแทนที่การแข่งขันด้วยค่าทดแทนที่ให้ไว้ ฟังก์ชันใช้รูปแบบ สตริง ค่าทดแทน และพารามิเตอร์ทางเลือกของการนับ พารามิเตอร์การนับจะควบคุมจำนวนการเกิดขึ้นที่คุณต้องการแทนที่ โดยค่าเริ่มต้น จะแทนที่ทั้งหมดและส่งคืนสตริงใหม่
- re.split(): มันแยกสตริงที่ไซต์ที่ตรงกันและส่งคืนส่วนต่าง ๆ เป็นสตริงที่แยกจากกันในรายการ
- re.search(): ฟังก์ชันนี้ส่งคืนออบเจกต์การจับคู่ที่มีการจับคู่ที่พบในสตริงพร้อมกับกลุ่มทั้งหมดที่ถูกจับ อาจมีประโยชน์เมื่อคุณต้องการจัดเก็บกลุ่มเหล่านี้เป็นคอลัมน์ที่แยกจากกัน
ในการดำเนินการนี้:
ตรงกัน = ค้นคว้า (รูปแบบ, สตริง)
match.group(1)
Group(0) คืนค่าการแข่งขันทั้งหมดและตัวเลขถัดไปที่ตรงกันหมายถึงกลุ่มอื่น
ชำระเงิน: เงินเดือนนักพัฒนา Python ในอินเดีย
บทสรุป
นิพจน์ทั่วไปเป็นวิธีที่มีประสิทธิภาพในการจับรูปแบบในข้อมูลที่เป็นข้อความ อาจต้องใช้ความพยายามเป็นพิเศษเล็กน้อยในการรักษาคำสั่งของอักขระต่างๆ แต่ช่วยลดความซับซ้อนของกระบวนการดึงข้อมูลในกรณีการใช้งานที่ซับซ้อน
ให้ตัวอย่างนิพจน์ทั่วไปใน Python
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการทำงานหรือนิพจน์ทั่วไปใน Python:
ก. การกรองอีเมล
นิพจน์ทั่วไปสามารถใช้อย่างมีประสิทธิภาพในการกรองอีเมล ไวยากรณ์ปกติสำหรับการกรองอีเมลคือ - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
นิพจน์นี้แบ่งออกเป็นสามกลุ่มและจัดการกับหลายกรณีรวมถึง - เมื่อชื่อผู้ใช้เป็นตัวอักษรและตัวเลขและเมื่อมีจุด เช่น “first.last@” นิพจน์นี้จะใช้สำหรับโดเมนระดับบนสุดที่มีอักขระ 2-4 ตัว
ข. วันที่กรอง
วันที่อาจเป็นปัจจัยสำคัญในขณะที่จัดการการกรองข้อมูล ข้อมูลที่เป็นข้อความที่คุณกำลังติดต่อด้วยมักประกอบด้วยวันที่ นิพจน์ทั่วไปหรือ RegEx ที่ดึงข้อมูลจากข้อความปกติคือ - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
วันที่และเดือนสามารถมีได้ถึง 2 หลักในขณะที่เดือนสามารถมีได้ถึง 4 หลัก
ฟังก์ชั่นที่เกี่ยวข้องกับการนำนิพจน์ทั่วไปไปใช้ใน Python มีอะไรบ้าง
ฟังก์ชันต่อไปนี้เกี่ยวข้องกับการนำนิพจน์ทั่วไปไปใช้ใน Python:
1. re.findall() - ฟังก์ชันนี้ยอมรับรูปแบบที่จะจับคู่กับสตริงข้อความ ส่งคืนสตริงที่ตรงกัน
2. re.sub() - Sub ใน “re.sub” ย่อมาจาก “substitution” เมธอดนี้ทำงานเหมือนกับฟังก์ชัน "re.findall()" ทุกประการ
3. re.split() - มันแยกสตริงรอบ ๆ ตัวคั่นซึ่งจะถูกส่งผ่านไปเป็นพารามิเตอร์ ตัวคั่นอาจเป็นอะไรก็ได้
4. re.search() - ฟังก์ชันนี้ส่งคืนการจับคู่ที่พบในสตริงพร้อมกับกลุ่มสตริงอื่น ๆ ที่จับได้
ลำดับพิเศษใดบ้างที่ใช้ในนิพจน์ทั่วไป
ต่อไปนี้เป็นลำดับพิเศษบางส่วนที่ใช้ในนิพจน์ทั่วไป:
1. A: ตรวจสอบว่าสตริงเริ่มต้นด้วยอักขระที่กำหนดหรือไม่
2. (ฟอร์เวิร์ดสแลช) b: ตรวจสอบว่าสตริงเริ่มต้นหรือลงท้ายด้วยอักขระที่กำหนด (สตริง)/b ตรวจสอบจุดเริ่มต้นในขณะที่ (เครื่องหมายทับย้อนกลับ) b (สตริง) ตรวจสอบจุดสิ้นสุด
3. B: มันอยู่ตรงข้ามกับ b เลย ตรวจสอบว่าสตริงไม่ขึ้นต้นด้วยอักขระที่กำหนดหรือไม่
4. d: ตรวจสอบค่าตัวเลขในสตริง
5. D: ตรวจสอบค่าหรืออักขระที่ไม่ใช่ตัวเลข
6. s: ตรวจสอบอักขระช่องว่างใด ๆ
7. S: ตรวจสอบอักขระที่ไม่ใช่ช่องว่าง
8. w: ตรวจสอบอักขระที่เป็นตัวอักษรและตัวเลขคละกัน
9. W: ตรวจสอบอักขระที่ไม่ใช่ตัวอักษรและตัวเลข