Python: ตรวจสอบว่า String มีสตริงย่อยหรือไม่

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

ในคู่มือนี้เราจะมาดูกัน วิธีตรวจสอบว่าสตริงมีสตริงย่อยหรือไม่ ในไพทอน

พื้นที่ 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 ที่ปรึกษาด้านซอฟต์แวร์และนักพัฒนาที่มีความหลงใหลในการช่วยเหลือผู้อื่นปรับปรุงชีวิตของพวกเขาผ่านการเขียนโค้ด ยาโคบเป็นผู้สร้าง ความมุ่งมั่นเริ่มต้น – ไซต์ที่อุทิศตนเพื่อช่วยให้นักพัฒนาที่อยากรู้อยากเห็นเรียนรู้วิธีการเขียนโค้ดโปรแกรมโปรดของพวกเขา โครงการเด่นช่วยผู้คน เรียนรู้คอมไพล์ ในระดับโค้ด

ประทับเวลา:

เพิ่มเติมจาก สแต็ค