นิพจน์ทั่วไปคือชนิดของภาษาโปรแกรมที่ใช้ในการระบุว่ามีรูปแบบอยู่ในลำดับของอักขระที่กำหนด (สตริง) หรือไม่
นิพจน์ทั่วไปหรือ 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'>