นิพจน์ทั่วไปใน Python [พร้อมตัวอย่าง]: จะนำไปใช้อย่างไร

เผยแพร่แล้ว: 2021-01-29

ขณะประมวลผลข้อมูลดิบจากแหล่งใดๆ การดึงข้อมูลที่ถูกต้องเป็นสิ่งสำคัญเพื่อให้ได้รับข้อมูลเชิงลึกที่มีความหมายจากข้อมูล บางครั้งก็ยากที่จะเอารูปแบบเฉพาะออกจากข้อมูลโดยเฉพาะในกรณีของข้อมูลที่เป็นข้อความ

ข้อมูลที่เป็นข้อความประกอบด้วยย่อหน้าของข้อมูลที่รวบรวมผ่านแบบฟอร์มการสำรวจ เว็บไซต์ที่คัดลอกมา และแหล่งข้อมูลอื่นๆ Channing ของตัวเข้าถึงสตริงต่างๆ ที่มีฟังก์ชัน pandas หรือฟังก์ชันแบบกำหนดเองอื่นๆ สามารถทำงานได้สำเร็จ แต่ถ้าจำเป็นต้องได้รับรูปแบบที่เฉพาะเจาะจงมากขึ้นล่ะ นิพจน์ทั่วไปทำงานนี้ได้อย่างง่ายดาย

สารบัญ

นิพจน์ทั่วไป (RegEx) คืออะไร?

นิพจน์ทั่วไปคือการแสดงชุดอักขระสำหรับสตริง นำเสนอสูตรทั่วไปสำหรับรูปแบบเฉพาะในสตริง ซึ่งช่วยในการแยกข้อมูลที่ถูกต้องออกจากกลุ่มข้อมูล นิพจน์มักจะประกอบด้วยสัญลักษณ์หรืออักขระที่ช่วยในการสร้างกฎ แต่ในแวบแรก อาจดูแปลกและเข้าใจยาก สัญลักษณ์เหล่านี้มีความหมายที่เกี่ยวข้องซึ่งอธิบายไว้ที่นี่

เรียนรู้ หลักสูตรวิทยาศาสตร์ข้อมูล จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

อักขระ Meta ใน RegEx

  1. '.': เป็นไวด์การ์ด จับคู่อักขระตัวเดียว (อักขระใดก็ได้ แต่เพียงครั้งเดียว)
  2. ^: หมายถึงจุดเริ่มต้นของสตริง
  3. $: หมายถึงจุดสิ้นสุดของสตริง
  4. [ ]: จับคู่หนึ่งในชุดอักขระภายใน [ ]
  5. [az]: จับคู่หนึ่งในช่วงของอักขระ a,b,…,z
  6. [^abc] : จับคู่อักขระที่ไม่ใช่ a,b หรือ c
  7. a|b: จับคู่ a หรือ b โดยที่ a และ b เป็นสตริง
  8. () : กำหนดขอบเขตสำหรับตัวดำเนินการ
  9. \ : เปิดใช้งาน Escape สำหรับอักขระพิเศษ (\t, \n, \b, \.)
  10. \b: จับคู่ขอบเขตของคำ
  11. \d : ตัวเลขใด ๆ เทียบเท่ากับ [0-9]
  12. \D: ใดๆ ที่ไม่ใช่ตัวเลข เทียบเท่ากับ [^0-9]
  13. \s : ช่องว่างใด ๆ เทียบเท่ากับ [ \t\n\r\f\v]
  14. \S : ใดๆ ที่ไม่ใช่ช่องว่าง เทียบเท่ากับ [^\t\n\r\f\v]
  15. \w : ตัวอักษรและตัวเลขใดๆ เทียบเท่ากับ [a-zA-Z0-9_]
  16. \W : ที่ไม่ใช่ตัวอักษรและตัวเลข เทียบเท่ากับ [^a-zA-Z0-9_]
  17. '*': จับคู่ 0 รายการขึ้นไป
  18. '+': จับคู่อย่างน้อยหนึ่งรายการ
  19. '?': จับคู่ศูนย์หรือหนึ่งรายการ
  20. {n}: ซ้ำ n ครั้ง, n>=0
  21. {n,}: ซ้ำอย่างน้อย n ครั้ง
  22. {,n}: ไม่เกิน n ครั้ง
  23. {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 มีฟังก์ชันที่หลากหลายและทุกฟังก์ชันมีกรณีการใช้งานที่แตกต่างกัน มาดูหน้าที่ที่สำคัญบางประการกัน:

  1. re.findall(): ฟังก์ชันนี้จะคืนค่ารายการของการจับคู่ทั้งหมดในสตริงทดสอบตามรูปแบบที่ส่ง พิจารณาตัวอย่างนี้:

string = '25-12-1999 สุ่มข้อความที่นี่ 25/12/1999'

พิมพ์ (re.findall(รูปแบบ, สตริง))

จะส่งกลับเฉพาะวันที่จากสตริงในรายการ

  1. re.sub(): Sub ในฟังก์ชันนี้ย่อมาจาก substitution และทำสิ่งเดียวกัน มันแทนที่การแข่งขันด้วยค่าทดแทนที่ให้ไว้ ฟังก์ชันใช้รูปแบบ สตริง ค่าทดแทน และพารามิเตอร์ทางเลือกของการนับ พารามิเตอร์การนับจะควบคุมจำนวนการเกิดขึ้นที่คุณต้องการแทนที่ โดยค่าเริ่มต้น จะแทนที่ทั้งหมดและส่งคืนสตริงใหม่
  2. re.split(): มันแยกสตริงที่ไซต์ที่ตรงกันและส่งคืนส่วนต่าง ๆ เป็นสตริงที่แยกจากกันในรายการ
  3. 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: ตรวจสอบอักขระที่ไม่ใช่ตัวอักษรและตัวเลข