ตัวอย่าง Python Regex

Tawxyang Python Regex



regex รูปแบบเต็มคือนิพจน์ทั่วไป เป็นคุณลักษณะที่สำคัญของภาษาการเขียนโปรแกรมใดๆ เป็นรูปแบบสตริงที่ใช้ในการจับคู่ ค้นหา หรือแทนที่สตริงในค่าสตริง รูปแบบ regex สามารถใช้ในสคริปต์ Python ได้โดยใช้โมดูล “re” ของ Python โมดูลนี้มีฟังก์ชันหลายประเภทสำหรับดำเนินการกับสตริงที่แตกต่างกัน มีการใช้อักขระเมตาและลำดับพิเศษที่แตกต่างกันเพื่อกำหนดรูปแบบ regex เพื่อค้นหาหรือแทนที่งาน วัตถุประสงค์ของการใช้อักขระเมตา ลำดับพิเศษ และวิธีการ regex ที่ใช้กันทั่วไปในสคริปต์ Python แสดงอยู่ในบทช่วยสอนนี้

เมตาอักขระบางตัวที่ใช้กันทั่วไปใน regex:









ตัวละคร วัตถุประสงค์
'+' ใช้เพื่อจับคู่อักขระหนึ่งหรือหลายรายการในสตริง
'*' ใช้เพื่อจับคู่อักขระเฉพาะในสตริงตั้งแต่ศูนย์ขึ้นไป
'?' ใช้เพื่อจับคู่อักขระเฉพาะในสตริงเป็นศูนย์หรือหนึ่งรายการ
'^' ใช้เพื่อจับคู่อักขระหรือสตริงเฉพาะที่จุดเริ่มต้นของสตริง
'$' ใช้เพื่อจับคู่อักขระหรือสตริงเฉพาะที่ส่วนท้ายของสตริง
'|' ใช้เพื่อจับคู่สตริงหลายรายการในสตริง มันทำงานเหมือนตรรกะหรือ
'[]' ใช้เพื่อจับคู่ช่วงของอักขระ
'{}' ใช้เพื่อจับคู่อักขระตามจำนวนที่กำหนด



ลำดับพิเศษบางอย่างที่ใช้กันทั่วไปใน regex:





ลำดับ วัตถุประสงค์
'\เอ' ใช้เพื่อจับคู่อักขระเฉพาะที่จุดเริ่มต้นของสตริง มันทำงานเหมือนอักขระ “^”
'\b', '\B' “\b” ใช้เพื่อจับคู่สตริงที่มีอักขระหรือคำเฉพาะที่จุดเริ่มต้นหรือจุดสิ้นสุดของสตริง “\B” ทำงานตรงข้ามกับ “\b”
'\d', '\D' “\d” ใช้เพื่อจับคู่เลขทศนิยมในสตริงที่คล้ายกับ “[0-9]” “\D” ทำงานตรงข้ามกับ “\d”
'\s', '\S' “\s” ใช้เพื่อจับคู่ช่องว่างในสตริงที่คล้ายกับ “[\n\t\r\v]” “\S” ทำงานตรงข้ามกับ “\s”
'\w', '\W' “\w” ใช้เพื่อจับคู่อักขระตัวอักษรและตัวเลขในสตริง “\W” ทำงานตรงข้ามกับ “\w”
'\กับ' ใช้เพื่อจับคู่อักขระเฉพาะที่ส่วนท้ายของสตริง มันทำงานเหมือนกับอักขระ “$”

ตัวอย่างที่ 1: จับคู่สตริงโดยใช้ฟังก์ชัน Match()

ฟังก์ชัน match() ใช้เพื่อจับคู่รูปแบบ regex ที่จุดเริ่มต้นของสตริง ไวยากรณ์ของฟังก์ชันนี้ได้รับดังนี้:



ไวยากรณ์:

จับคู่ใหม่ ( รูปแบบ, ธง = 0 )

ในที่นี้ อาร์กิวเมนต์แรกใช้เพื่อกำหนดรูปแบบ regex อาร์กิวเมนต์ที่สองใช้เพื่อกำหนดสตริงหลัก อาร์กิวเมนต์ที่สามเป็นทางเลือกและใช้เพื่อกำหนดแฟล็กประเภทต่างๆ

สร้างไฟล์ Python ด้วยสคริปต์ต่อไปนี้ที่ตรงกับรูปแบบ regex ด้วยสตริงที่กำหนดโดยใช้ฟังก์ชัน match() ขั้นแรก จะใช้รูปแบบ regex ที่กำหนดเพื่อจับคู่ ถัดไป คำค้นหาจะถูกดึงมาจากผู้ใช้และใช้เป็นรูปแบบ regex เพื่อจับคู่กับค่าสตริง หากพบรายการที่ตรงกัน คำค้นหาจะถูกพิมพ์ มิฉะนั้น ระบบจะพิมพ์สตริง “ไม่พบค่าที่ตรงกัน”

#นำเข้าโมดูลที่จำเป็น
นำเข้าอีกครั้ง

#กำหนดฟังก์ชันเพื่อพิมพ์ผลลัพธ์ที่ตรงกัน
def matchString ( ) : :
#ตรวจสอบค่าที่ส่งคืนของฟังก์ชัน match()
ถ้า พร้อมด้วย ! = ไม่มี:
พิมพ์ ( ''' + mat.group ( ) + '' พบได้ใน '' + ค่าstrValue + ''' )
อื่น:
พิมพ์ ( 'ไม่พบค่าที่ตรงกัน' )

#กำหนดค่าสตริง
strValue = 'เข้าก่อนออกก่อน'
#จับคู่สายตามรูปแบบ
mat = จับคู่ใหม่ ( '^ก่อนอื่น' , strValue )
#ฟังก์ชั่นการโทรพิมพ์ผลการแข่งขัน
matchString ( )

#เอาสตริงการค้นหา
ในค่า = อินพุต ( 'ป้อนค่าการค้นหา:' )
mat = จับคู่ใหม่ ( ในค่า + , strValue )
#ฟังก์ชั่นการโทรพิมพ์ผลการแข่งขัน
matchString ( )

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นสำหรับค่าอินพุต 'แรก':

ตัวอย่างที่ 2: ค้นหาสตริงโดยใช้ฟังก์ชัน Findall()

ฟังก์ชัน findall() ใช้เพื่อส่งคืนคำที่ตรงกันทั้งหมดที่พบในสตริงหลักเป็นรูปแบบทูเพิล

ไวยากรณ์:

ค้นหาอีกครั้ง ( รูปแบบ, ธง = 0 )

ในที่นี้ อาร์กิวเมนต์แรกใช้เพื่อกำหนดรูปแบบ regex อาร์กิวเมนต์ที่สองใช้เพื่อกำหนดสตริงหลัก อาร์กิวเมนต์ที่สามเป็นทางเลือกและใช้เพื่อกำหนดแฟล็กประเภทต่างๆ

สร้างไฟล์ Python ด้วยสคริปต์ต่อไปนี้ซึ่งรับค่าสตริงหลักและค่าสตริงการค้นหาจากผู้ใช้ จากนั้น ใช้คำค้นหาในรูปแบบ regex เพื่อค้นหาคำค้นหาในสตริงหลัก จำนวนรายการที่ตรงกันทั้งหมดจะถูกพิมพ์ลงในเอาต์พุต

#นำเข้าโมดูลที่จำเป็น
นำเข้าอีกครั้ง

#รับค่าสตริง
ในค่า = อินพุต ( 'ป้อนสตริง:' )

#ใช้คำค้นหา
srcValue = อินพุต ( 'ป้อนคำค้นหา:' )

#ค้นหาคำในสตริง
srcResult = ค้นหาอีกครั้ง ( srcValue + '\ใน*' , ในมูลค่า )
#พิมพ์ผลการค้นหา
พิมพ์ ( 'คำ '' +srcValue+ พบ '' ในสตริง '
+ STR ( เท่านั้น ( srcผลลัพธ์ ) ) + 'ครั้ง' )

ตามผลลัพธ์ คำค้นหา 'กิน' จะพบสองครั้งในสตริงหลัก 'เรากินเพื่ออยู่และไม่ได้อยู่เพื่อกิน'

ตัวอย่างที่ 3: ค้นหาสตริงโดยใช้ฟังก์ชัน Search()

search() เป็นอีกฟังก์ชันหนึ่งในการค้นหารูปแบบเฉพาะในค่าสตริง มันมีอาร์กิวเมนต์เดียวกันกับฟังก์ชัน match() และ findall() สร้างไฟล์ Python ด้วยสคริปต์ต่อไปนี้ที่ค้นหาคำว่า 'Python' ในค่าสตริงที่จะนำมาจากผู้ใช้ หากมีคำค้นหาอยู่ในค่าที่ป้อน ข้อความแสดงความสำเร็จจะถูกพิมพ์ มิฉะนั้น ข้อความแจ้งข้อผิดพลาดจะถูกพิมพ์ออกมา

#นำเข้าโมดูลใหม่
นำเข้าอีกครั้ง

#รับค่าสตริง
ในค่า = อินพุต ( 'ป้อนสตริง:' )
#ค้นหาคำเฉพาะในค่าสตริง
srcResult = ค้นหาใหม่ ( 'หลาม\w*' , ในมูลค่า )

#ตรวจสอบคำค้นหาว่าพบหรือไม่
ถ้า src ผลลัพธ์:
พิมพ์ ( ''' + srcResult.group ( ) + '' พบได้ใน '' + ในมูลค่า + ''' )
อื่น:
พิมพ์ ( 'ไม่พบสตริงการค้นหา' )

เอาท์พุท:

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหากสตริงอินพุตเป็น “ฉันชอบการเขียนโปรแกรม Python”:

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหากสตริงอินพุตคือ “ฉันชอบการเขียนโปรแกรม PHP”:

ตัวอย่างที่ 4: แทนที่สตริงโดยใช้ฟังก์ชันย่อย ()

ฟังก์ชันย่อย () ใช้เพื่อค้นหาสตริงเฉพาะตามรูปแบบและแทนที่ด้วยคำอื่น ไวยากรณ์ของฟังก์ชันนี้ได้รับดังนี้:

ไวยากรณ์:

รีซับ ( รูปแบบ, แทนที่_สตริง, main_string )

อาร์กิวเมนต์แรกของฟังก์ชันนี้มีรูปแบบที่ใช้ในการค้นหาสตริงเฉพาะในสตริงหลัก

อาร์กิวเมนต์ที่สองของฟังก์ชันนี้ประกอบด้วยค่าสตริง 'แทนที่'

อาร์กิวเมนต์ที่สามของฟังก์ชันนี้มีสตริงหลัก

ฟังก์ชันนี้จะส่งคืนสตริงที่ถูกแทนที่หากมีคำที่ตรงกันอยู่ในสตริงหลักตามอาร์กิวเมนต์แรก

สร้างไฟล์ Python ด้วยสคริปต์ต่อไปนี้ซึ่งจะค้นหาตัวเลขสองหลักที่ท้ายสตริง หากสตริงมีตัวเลขสองหลักต่อท้าย ตัวเลขจะถูกแทนที่ด้วยสตริง “$50”

#นำเข้าโมดูลใหม่
นำเข้าอีกครั้ง

#กำหนดสตริงหลัก
strValue = 'ราคาหนังสือ 70'

#กำหนดรูปแบบการค้นหา
รูปแบบ = '[0-9]{2}'

#กำหนดค่าทดแทน
แทนที่ค่า = '50 ดอลลาร์'

#Search และแทนที่สตริงตามรูปแบบ
modified_strValue = re.sub ( รูปแบบ, แทนที่ค่า, strValue )
#Print ค่าสตริงดั้งเดิมและที่แก้ไข
พิมพ์ ( 'สตริงดั้งเดิม:' + ค่า str )
พิมพ์ ( 'สตริงที่แก้ไข:' + modified_strValue )

เอาท์พุท:

มี 70 ที่ปลายสายหลัก ดังนั้น 70 จะถูกแทนที่ด้วย $50 ในสตริงที่ถูกแทนที่

ตัวอย่างที่ 5: แทนที่สตริงโดยใช้ฟังก์ชัน Subn()

ฟังก์ชัน subn() ทำงานเหมือนกับฟังก์ชัน sub() ยกเว้นว่าจะส่งกลับเอาต์พุตเป็นทูเพิล โดยที่ดัชนีแรกมีค่าที่ถูกแทนที่ และดัชนีที่สองมีจำนวนรายการที่ตรงกันทั้งหมด

สร้างไฟล์ Python ด้วยสคริปต์ต่อไปนี้ซึ่งจะค้นหาตัวอักษร A ถึง L ในสตริง “LinuxHint.com” โดยใช้ฟังก์ชัน subn():

#นำเข้าโมดูลใหม่
นำเข้าอีกครั้ง

#กำหนดสตริงหลัก
strValue = 'LinuxHint.com'

#กำหนดรูปแบบการค้นหา
รูปแบบ = '[ไปที่]'

#กำหนดค่าทดแทน
แทนที่ค่า = '*'

#Search และแทนที่สตริงตามรูปแบบ
modified_strValue = re.subn ( รูปแบบ, แทนที่ค่า, strValue )
#Print สตริงต้นฉบับและเอาต์พุตของ subn()
พิมพ์ ( “สตริงดั้งเดิม: \n ' + ค่า str )
พิมพ์ ( 'ผลลัพธ์ของฟังก์ชัน subn(): ' )
พิมพ์ ( modified_strValue )

เอาท์พุท:

ตามผลลัพธ์ต่อไปนี้ อักขระ 'L' และ 'H' จะถูกแทนที่ด้วยอักขระ '*'

ตัวอย่างที่ 6: แยกสตริงโดยใช้ฟังก์ชัน Split()

สร้างไฟล์ Python ด้วยสคริปต์ต่อไปนี้ซึ่งใช้ฟังก์ชัน split() เพื่อแบ่งสตริงหลักออกเป็นหลายส่วนตามรูปแบบ regex:

#นำเข้าโมดูลใหม่
นำเข้าอีกครั้ง

#กำหนดค่าสตริง
strVal = 'รูปา อัคเตอร์;นิรา เชาดูรี;มาซารุล อิสลาม'
#กำหนดรูปแบบที่จะใช้แยกข้อมูล
รูปแบบ = '[^อา-ซ่า-ซ ]'
#เก็บค่าการแยกไว้ในรายการ
split_result = แยกใหม่ ( รูปแบบ, strVal )
พิมพ์ ( 'ผลลัพธ์ของฟังก์ชัน split():' )
พิมพ์ ( split_result )

เอาท์พุท:

ตามเอาต์พุต สตริงหลักจะถูกแบ่งออกเป็นสามส่วนตามรูปแบบ '[^A-Za-z ]' ที่ใช้ในสคริปต์

บทสรุป

วัตถุประสงค์ของเมตาอักขระ ช่วง และฟังก์ชันในตัว Python ที่ใช้บ่อยที่สุดเพื่อค้นหา แทนที่ และแยกสตริงจะแสดงอยู่ในบทช่วยสอนนี้โดยใช้สคริปต์ Python แบบง่าย