ตรวจสอบว่าสตริงมีตัวช่วยสตริงย่อยเพื่อสรุปเงื่อนไขและสร้างโค้ดที่ยืดหยุ่นมากขึ้นหรือไม่ นอกจากนี้ ขึ้นอยู่กับโมเดลโดเมนของคุณ การตรวจสอบว่าสตริงมีสตริงย่อยอาจช่วยให้คุณสามารถอนุมานฟิลด์ของออบเจ็กต์ได้ หากสตริงเข้ารหัสฟิลด์ในตัวเอง
ในคู่มือนี้เราจะมาดูกัน วิธีตรวจสอบว่าสตริงมีสตริงย่อยหรือไม่ ในไพทอน
พื้นที่ in ผู้ประกอบการ
วิธีที่ง่ายที่สุดในการตรวจสอบว่าสตริง Python มีสตริงย่อยหรือไม่คือการใช้ in
ผู้ประกอบการ
พื้นที่ in
โอเปอเรเตอร์ใช้เพื่อตรวจสอบโครงสร้างข้อมูลสำหรับการเป็นสมาชิกใน Python มันจะส่งคืนบูลีน (อย่างใดอย่างหนึ่ง True
or False
- เพื่อตรวจสอบว่าสตริงมีสตริงย่อยใน Python หรือไม่โดยใช้ in
โอเปอเรเตอร์ เราก็เรียกใช้มันบน superstring:
fullstring = "StackAbuse"
substring = "tack"
if substring in fullstring:
print("Found!")
else:
print("Not found!")
ตัวดำเนินการนี้เป็นชวเลขสำหรับการเรียกวัตถุ __contains__
และยังใช้ได้ดีในการตรวจสอบว่ามีรายการอยู่ในรายการหรือไม่ เป็นที่น่าสังเกตว่ามันเป็น ไม่ปลอดภัยเป็นโมฆะดังนั้นหากของเรา fullstring
กำลังชี้ไปที่ None
จะมีการโยนข้อยกเว้น:
TypeError: argument of type 'NoneType' is not iterable
เพื่อหลีกเลี่ยงปัญหานี้ คุณจะต้องตรวจสอบก่อนว่าชี้ไปที่หรือไม่ None
หรือไม่:
fullstring = None
substring = "tack"
if fullstring != None and substring in fullstring:
print("Found!")
else:
print("Not found!")
พื้นที่ String.index() วิธี
ประเภท String ใน Python มีวิธีการที่เรียกว่า index()
ที่สามารถใช้เพื่อค้นหาดัชนีเริ่มต้นของการเกิดขึ้นครั้งแรกของสตริงย่อยในสตริง
หากไม่พบสตริงย่อย a ValueError
ข้อยกเว้นถูกส่งออกไป ซึ่งสามารถจัดการได้ด้วยบล็อก try-ยกเว้น-else:
fullstring = "StackAbuse"
substring = "tack"
try:
fullstring.index(substring)
except ValueError:
print("Not found!")
else:
print("Found!")
วิธีการนี้มีประโยชน์ถ้าคุณต้องการทราบตำแหน่งของสตริงย่อย แทนที่จะรู้แค่ว่ามีอยู่ในสตริงทั้งหมด วิธีการส่งคืนดัชนี:
print(fullstring.index(substring))
แม้ว่า – เพื่อประโยชน์ในการตรวจสอบว่าสตริงมีสตริงย่อยหรือไม่ นี่เป็นวิธีการแบบละเอียด
วิธีการ String.find()
คลาส String มีวิธีการอื่นที่เรียกว่า find()
ซึ่งสะดวกต่อการใช้งานมากกว่า index()
เนื่องจากเราไม่จำเป็นต้องกังวลเกี่ยวกับการจัดการข้อยกเว้นใดๆ เป็นหลัก
If find()
ไม่พบรายการที่ตรงกัน ส่งกลับ -1 มิฉะนั้นจะส่งกลับดัชนีซ้ายสุดของสตริงย่อยในสตริงที่ใหญ่กว่า:
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
fullstring = "StackAbuse"
substring = "tack"
if fullstring.find(substring) != -1:
print("Found!")
else:
print("Not found!")
โดยปกติแล้ว จะดำเนินการค้นหาเช่นเดียวกับ index()
และส่งกลับดัชนีของการเริ่มต้นของสตริงย่อยภายในสตริงหลัก:
print(fullstring.find(substring))
นิพจน์ทั่วไป (RegEx)
นิพจน์ทั่วไปให้วิธีที่ยืดหยุ่นมากขึ้น (แม้ว่าจะซับซ้อนกว่า) ในการตรวจสอบสตริงสำหรับการจับคู่รูปแบบ ด้วยนิพจน์ทั่วไป คุณสามารถดำเนินการค้นหาที่ยืดหยุ่นและมีประสิทธิภาพผ่านพื้นที่การค้นหาที่ใหญ่กว่ามาก แทนที่จะตรวจสอบง่ายๆ เหมือนครั้งก่อนๆ
Python มาพร้อมกับโมดูลในตัวสำหรับนิพจน์ทั่วไปที่เรียกว่า re
. re
โมดูลมีฟังก์ชันที่เรียกว่า search()
ซึ่งเราสามารถใช้เพื่อจับคู่รูปแบบสตริงย่อย:
from re import search
fullstring = "StackAbuse"
substring = "tack"
if search(substring, fullstring):
print "Found!"
else:
print "Not found!"
วิธีนี้จะดีที่สุดหากคุณต้องการฟังก์ชันการจับคู่ที่ซับซ้อนมากขึ้น เช่น การจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หรือหากคุณกำลังเผชิญกับพื้นที่ค้นหาขนาดใหญ่ มิฉะนั้น ควรหลีกเลี่ยงภาวะแทรกซ้อนและความเร็วที่ช้าลงของ regex สำหรับกรณีการใช้งานการจับคู่สตริงย่อยแบบธรรมดา
เกี่ยวกับผู้เขียน
บทความนี้เขียนโดย Jacob Stopak ที่ปรึกษาด้านซอฟต์แวร์และนักพัฒนาที่มีความหลงใหลในการช่วยเหลือผู้อื่นปรับปรุงชีวิตของพวกเขาผ่านการเขียนโค้ด ยาโคบเป็นผู้สร้าง ความมุ่งมั่นเริ่มต้น – ไซต์ที่อุทิศตนเพื่อช่วยให้นักพัฒนาที่อยากรู้อยากเห็นเรียนรู้วิธีการเขียนโค้ดโปรแกรมโปรดของพวกเขา โครงการเด่นช่วยผู้คน เรียนรู้คอมไพล์ ในระดับโค้ด