นิพจน์ทั่วไปคือชนิดของภาษาโปรแกรมที่ใช้ในการระบุว่ามีรูปแบบอยู่ในลำดับของอักขระที่กำหนด (สตริง) หรือไม่
นิพจน์ทั่วไปหรือ Regex คือลำดับของอักขระที่ใช้ตรวจสอบว่าสตริงมีรูปแบบการค้นหาที่ระบุหรือไม่
โมดูล RegEx
ในการใช้โมดูล RegEx นั้น python มาพร้อมกับแพ็คเกจในตัวที่เรียกว่า re ซึ่งเราต้องทำงานกับนิพจน์ทั่วไป หากต้องการใช้โมดูล RegEx เพียงนำเข้าโมดูลใหม่
นำเข้าอีกครั้ง
ตัวอย่าง
import retxt ="การใช้ python ในการเรียนรู้ของเครื่อง"x =re.search("^Use.*Learning$", txt)if (x):print("YES! We have a match!")else:print("ไม่ตรงกัน") ผลลัพธ์
ใช่! เรามีนัดกัน!
ฟังก์ชัน RegEx
โมดูล re มีฟังก์ชันคู่ที่ช่วยให้เราค้นหาสตริงสำหรับการจับคู่ได้
| ฟังก์ชัน | คำอธิบาย |
|---|---|
| findall | ส่งคืนรายการที่มีการแข่งขันทั้งหมด |
| ค้นหา | ส่งคืนออบเจกต์ Match หากพบการจับคู่ที่ใดก็ได้ในสตริง |
| สปลิต | ส่งคืนรายการ โดยที่สตริงถูกแยกออกในแต่ละคณิตศาสตร์ |
| sub | แทนที่หนึ่งหรือหลายรายการที่ตรงกันด้วยสตริง |
เมตาคาแรคเตอร์
อักขระเมตาใน RegEx เป็นอักขระที่มีความหมายพิเศษ
| ตัวละคร | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| [] | ชุดอักขระ | “[a-m]” |
| \ | ส่งสัญญาณลำดับพิเศษ และยังใช้เพื่อหลีกอักขระพิเศษ | “\d” |
| . | อักขระใดๆ ยกเว้นอักขระขึ้นบรรทัดใหม่ | "เขา..โอ" |
| ^ | เริ่มต้นด้วย | “^สวัสดี” |
| $ | ลงท้ายด้วย | “โลก$” |
| * | ไม่มีเหตุการณ์เกิดขึ้นหรือมากกว่า | “เอ๊กซ์*” |
| + | เกิดขึ้นอย่างน้อยหนึ่งรายการ | “aix+” |
| {} | จำนวนครั้งที่ระบุไว้ | “a|{2}” |
| | | หรือ | “สั้น | ยาว” |
| () | จับภาพและจัดกลุ่ม | |
ลำดับพิเศษ
ลำดับพิเศษใน RegEx คือ \ ตามด้วยหนึ่งในอักขระที่แสดงด้านล่างและมีความหมายพิเศษ -
| ตัวละคร | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| \A | ส่งคืนการจับคู่หากอักขระที่ระบุอยู่ที่จุดเริ่มต้นของสตริง | “\APyt” |
| \b | ส่งคืนการจับคู่หากอักขระที่ระบุอยู่ที่จุดเริ่มต้นหรือจุดสิ้นสุดของคำ | r”\bPython” r”world\b” |
| \B | ส่งคืนการจับคู่หากมีอักขระที่ระบุ แต่ไม่ใช่ที่จุดเริ่มต้น (หรือจุดสิ้นสุด) ของคำ | r”\Bpython” r”World\B” |
| \d | คืนค่าที่ตรงกันหากสตริงมีตัวเลข | “\d” |
| \D | คืนค่าที่ตรงกันหากสตริงไม่มีตัวเลข | “\D” |
| \s | ส่งคืนการจับคู่ที่สตริงมีอักขระช่องว่างสีขาว | “\s” |
| \S | คืนค่าการจับคู่ที่สตริงไม่มีอักขระช่องว่าง | “\S” |
| \w | ส่งกลับค่าที่ตรงกันหากสตริงมีอักขระคำใดๆ (อักขระอาจเป็นตัวอักษรจาก a ถึง Z ตัวเลขตั้งแต่ 0-9 และขีดล่าง _ อักขระ | “\w” |
| \W | ส่งคืนการจับคู่โดยที่สตริงไม่มีอักขระคำใดๆ | “\W” |
| \Z | ส่งคืนการจับคู่หากอักขระที่ระบุอยู่ที่ส่วนท้ายของสตริง | “โลก\Z” |
ชุด
ชุดใน RegEx คือชุดของอักขระภายในวงเล็บเหลี่ยมคู่ [] ซึ่งมีความหมายพิเศษบางอย่าง
| ตั้งค่า | คำอธิบาย |
|---|---|
| [ราช] | ส่งคืนการจับคู่หากมีอักขระตัวใดตัวหนึ่งที่ระบุ (a, r หรือ n) อยู่ |
| [a-r] | ส่งกลับค่าที่ตรงกันสำหรับอักษรตัวพิมพ์เล็ก เรียงตามตัวอักษรระหว่าง a และ r |
| [^raj] | คืนค่าการจับคู่สำหรับอักขระใดๆ ยกเว้น r, a และ j |
| [0123] | ส่งคืนการแข่งขันโดยที่ spe . ใด ๆ |
| [0-9] | ส่งคืนการจับคู่สำหรับตัวเลขใดๆ ระหว่าง 0 ถึง 9 |
| [0-3][0-8] | ส่งคืนการจับคู่สำหรับตัวเลขสองหลักระหว่าง 00 ถึง 38 |
| [a-zA-Z] | คืนค่าการจับคู่ของอักขระใดๆ ที่เรียงตามตัวอักษรระหว่าง a ถึง z หรือ A ถึง Z |
| [+] | คืนค่าการจับคู่สำหรับอักขระ + ใดๆ ในสตริง |
ตัวอย่าง - findall()
ฟังก์ชัน findall() จะคืนค่ารายการที่มีข้อมูลที่ตรงกันทั้งหมด
#Print รายการการแข่งขันทั้งหมด (“ใน”) จาก textimport retxt ="การใช้ python ในการเรียนรู้ของเครื่อง"x =re.findall("in", txt)print(x) ผลลัพธ์
['in' 'in' 'in']
รายการแสดงผลด้านบนประกอบด้วยรายการที่ตรงกันทั้งหมดตามลำดับที่พบ อย่างไรก็ตาม หากไม่พบรายการที่ตรงกัน รายการว่างจะปรากฏขึ้น
เพียงเปลี่ยนบรรทัดด้านล่างในโปรแกรมด้านบน "รูปแบบ" ซึ่งไม่มีอยู่ในข้อความหรือสตริง
x =re.findall("สวัสดี", txt) ผลลัพธ์
[]
ตัวอย่าง - ฟังก์ชั่นการค้นหา ()
ฟังก์ชัน search() จะค้นหาสตริงและส่งคืนออบเจกต์ที่ตรงกันหากพบรายการที่ตรงกัน
อย่างไรก็ตาม หากมีการแข่งขันมากกว่าหนึ่งรายการ ระบบจะส่งคืนเฉพาะการแข่งขันครั้งแรกเท่านั้น
import retxt ="Python เป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดในโลก"searchObj =re.search("\s", txt)print("อักขระ white-space ตัวแรกอยู่ในตำแหน่ง:", searchObj. start()) ผลลัพธ์
อักขระช่องว่างตัวแรกอยู่ในตำแหน่ง:6
อย่างไรก็ตาม หากไม่พบรายการที่ตรงกัน จะไม่มีการส่งกลับ
ตัวอย่าง - ฟังก์ชัน split()
ฟังก์ชัน split() ใน RegEx จะส่งกลับรายการที่มีการแยกสตริงในแต่ละการแข่งขัน -
# Split ในแต่ละ white-space characterimport restring ="Python เป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดในโลก"searchObj =re.split("\s", string)print(searchObj) ผลลัพธ์
['Python', 'is', 'one', 'of', 'the', 'most', 'popular', 'languages', 'around', 'the', 'world']ก่อน>ตัวอย่าง - ฟังก์ชั่นย่อย ()
ฟังก์ชันย่อย () ใน RegEx คือการแทนที่การจับคู่ด้วยข้อความที่คุณเลือก
#Replace ทุกช่องว่างในสตริงด้วย _:import restring ="Python เป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดในโลก"searchObj =re.sub("\s", "_", string)print( searchObj)ผลลัพธ์
Python_is_one_of_the_most_popular_language_around_the_worldจับคู่วัตถุ
วัตถุที่ตรงกันใน RegEx เป็นวัตถุที่มีข้อมูลเกี่ยวกับการค้นหาและผลลัพธ์ ไม่พบรายการที่ตรงกัน ไม่มีการส่งคืน
ตัวอย่าง - ค้นหาสตริงและส่งคืนวัตถุที่ตรงกัน
import restring ="Python เป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดในโลก"searchObj =re.search("on", string)print(searchObj)ผลลัพธ์
<_sre.SRE_Match วัตถุ; span=(4, 6), match='on'>วัตถุที่ตรงกันมีคุณสมบัติและวิธีการที่ใช้เพื่อดึงข้อมูลเกี่ยวกับการค้นหาและผลลัพธ์
-
.span() – ส่งกลับ tuple ที่มีตำแหน่งเริ่มต้นและสิ้นสุดของการแข่งขันที่พบ
-
.string – ส่งกลับสตริงที่ส่งผ่านไปยังฟังก์ชัน
-
.group() – ส่งกลับส่วนของสตริงที่มีการจับคู่
ตัวอย่าง - พิมพ์ส่วนของสตริงที่มีการจับคู่
#ค้นหาคำใดๆ ที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่ “P”:import restring ="Python เป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดในโลก"searchObj =re.search(r"\bP\w+", string )print(searchObj)
ผลลัพธ์
<_sre.SRE_Match วัตถุ; span=(0, 6), match='Python'>