Python สตริง find() วิธีการพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Python เมธอด `string find()` เป็นเมธอดในตัวที่ส่งคืนดัชนีของการปรากฏครั้งแรกของสตริงย่อยภายในสตริงหลัก โดยจะส่งคืน `-1` เมื่อไม่พบสตริงย่อยนั้น เพื่อหลีกเลี่ยงข้อผิดพลาด

  • 🔍 ไวยากรณ์: ฟังก์ชัน find() รับสตริงย่อย พร้อมด้วยดัชนีเริ่มต้นและดัชนีสิ้นสุด (ไม่บังคับ) เพื่อจำกัดช่วงการค้นหา
  • 🎯 แมตช์แรก: find() จะส่งคืนดัชนีต่ำสุดของการปรากฏครั้งแรก โดยจะสแกนจากซ้ายไปขวา
  • ไม่พบข้อมูล: ฟังก์ชัน find() จะส่งคืนค่า -1 แทนที่จะแสดงข้อผิดพลาดเมื่อไม่พบสตริงย่อยที่ต้องการ
  • 🔁 ค้นหา (): เมธอด rfind() จะส่งคืนดัชนีสูงสุด โดยจะค้นหาจากด้านขวาแทน
  • ⚠️ ดัชนี(): เมธอด index() ทำงานคล้ายกับ find() แต่จะเกิดข้อผิดพลาด ValueError เมื่อไม่พบสตริงย่อยที่ต้องการค้นหา
  • 🤖 ความช่วยเหลือจากเอไอ: ผู้ช่วยเขียนโค้ด AI สร้างตรรกะ find() และเพิ่มประสิทธิภาพการค้นหาสตริงย่อยในไปป์ไลน์ข้อความ NLP

Python ค้นหาสตริง ()

ความหมายของ Python สตริงค้นหา ()?

Python ค้นหาสตริง () เป็นฟังก์ชันที่มีอยู่ใน Python ไลบรารีนี้ใช้สำหรับค้นหาดัชนีของการปรากฏครั้งแรกของสตริงย่อยภายในสตริงที่กำหนด ฟังก์ชัน find() จะส่งคืนค่า -1 แทนที่จะโยนข้อยกเว้นเมื่อสตริงย่อยที่ระบุไม่อยู่ในสตริงที่กำหนด นี่เป็นหนึ่งใน... Pythonใช้งานมากที่สุด วิธีการสตริง สำหรับการค้นหาข้อความ

ไวยากรณ์ของ Python ค้นหาสตริง ()

ไวยากรณ์พื้นฐานของ Python find() ฟังก์ชันเป็นดังนี้:

string.find(substring,start,end)

พารามิเตอร์สำหรับเมธอด find()

ต่อไปนี้คือพารามิเตอร์ทั้งสามของฟังก์ชัน find() ใน Python:

  • สตริงย่อย: ส่วนย่อยของข้อความที่คุณต้องการค้นหาในข้อความที่กำหนด
  • เริ่มต้น: (ตัวเลือกเสริม) ค่าเริ่มต้นที่จะใช้ในการค้นหาสตริงย่อย โดยค่าเริ่มต้นคือ 0
  • ปลาย: (ตัวเลือกเสริม) ค่าสุดท้ายที่จะสิ้นสุดการค้นหาสตริงย่อย โดยค่าเริ่มต้นจะเป็นความยาวของสตริง

ตัวอย่างของเมธอด find() ที่มีค่าเริ่มต้น

พารามิเตอร์ที่ส่งไปยัง Python เมธอด find() รับค่าเป็นสตริงย่อย ซึ่งก็คือสตริงที่คุณต้องการค้นหา บวกกับค่า start และ end โดยค่าเริ่มต้นของ start คือ 0 และค่า end คือความยาวของสตริง

ในตัวอย่างนี้ เราจะใช้เมธอด find() ใน Python ด้วยค่าเริ่มต้น

เมธอด find() จะค้นหาสตริงย่อยและให้ตำแหน่งของสตริงย่อยนั้นที่ปรากฏครั้งแรก หากสตริงย่อยนั้นปรากฏหลายครั้งในสตริงที่กำหนด เมธอดก็จะยังคงส่งคืนดัชนีหรือตำแหน่งของสตริงย่อยแรกที่ปรากฏอยู่ดี

ตัวอย่าง:

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Tutorials is at:", mystring.find("Tutorials"))

Output:

The position of Tutorials is at: 12

ตัวอย่างของ find() โดยใช้อาร์กิวเมนต์เริ่มต้น

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

ตัวอย่างด้านล่างระบุตำแหน่งเริ่มต้นเป็น 20 และใช้เมธอด find() Python การค้นหาจะเริ่มต้นจากตำแหน่งที่ 20 โดยตำแหน่งสิ้นสุดจะเป็นความยาวของสตริง ดังนั้นจึงค้นหาไปจนถึงจุดสิ้นสุดของสตริงตั้งแต่ตำแหน่งที่ 20 เป็นต้นไป

ตัวอย่าง:

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Tutorials is at:", mystring.find("Tutorials", 20))

Output:

The position of Tutorials is at 48

ตัวอย่างของ find() โดยใช้อาร์กิวเมนต์เริ่มต้นและสิ้นสุด

การใช้พารามิเตอร์ start และ end ช่วยให้เราจำกัดขอบเขตการค้นหาแทนที่จะค้นหาทั้งสตริง

ตัวอย่าง:

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Tutorials is at:", mystring.find("Tutorials", 5, 30))

Output:

The position of Tutorials is at 12

ตัวอย่างการใช้เมธอด find() เพื่อค้นหาตำแหน่งของสตริงย่อยที่กำหนดในสตริงหลัก

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

ตัวอย่าง:

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Best site is at:", mystring.find("Best site", 5, 40))
print("The position of Guru99 is at:", mystring.find("Guru99", 20))

Output:

The position of Best site is at: 27
The position of Guru99 is at: -1

Python สตริง rfind()

การขอ Python ฟังก์ชัน rfind() คล้ายกับฟังก์ชัน find() โดยมีข้อแตกต่างเพียงอย่างเดียวคือ rfind() จะให้ค่าดัชนีสูงสุดสำหรับสตริงย่อยที่กำหนด ในขณะที่ find() จะให้ค่าดัชนีต่ำสุด นั่นคือดัชนีแรกสุด ทั้ง rfind() และ find() จะคืนค่า -1 หากไม่พบสตริงย่อยนั้น

ในตัวอย่างด้านล่าง เรามีสตริง "พบปะ" Guruเว็บไซต์ 99 Tutorials เว็บไซต์ที่ดีที่สุดสำหรับ Python สอน!” และจะพยายามค้นหาตำแหน่งของสตริงย่อย Tutorials โดยใช้ find() และ rfind() สตริงย่อย Tutorials ปรากฏสองครั้งในสตริง

นี่คือตัวอย่างที่ใช้ทั้ง find() และ rfind()

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Tutorials using find() : ", mystring.find("Tutorials"))
print("The position of Tutorials using rfind() : ", mystring.rfind("Tutorials"))

Output:

The position of Tutorials using find() :  12
The position of Tutorials using rfind() :  48

ผลลัพธ์แสดงให้เห็นว่า find() จะให้ดัชนีของสตริงย่อย Tutorials ตัวแรกที่พบ ในขณะที่ rfind() จะให้ดัชนีสุดท้ายของสตริงย่อย Tutorials

Python ดัชนีสตริง ()

การขอ Python ฟังก์ชัน `index()` เป็นฟังก์ชันที่ให้ตำแหน่งของสตริงย่อยที่กำหนดให้ เหมือนกับฟังก์ชัน `find()` ความแตกต่างเพียงอย่างเดียวคือ `index()` จะโยนข้อยกเว้นหากสตริงย่อยนั้นไม่อยู่ในสตริงหลัก ในขณะที่ `find()` จะคืนค่า `-1`

นี่คือตัวอย่างการทำงานที่แสดงพฤติกรรมของดัชนี() และ find()

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Tutorials using find() : ", mystring.find("Tutorials"))
print("The position of Tutorials using index() : ", mystring.index("Tutorials"))

Output:

The position of Tutorials using find() :  12
The position of Tutorials using index() :  12

เราได้ตำแหน่งเดียวกันทั้งจากการใช้ find() และ index() ลองดูตัวอย่างเมื่อสตริงย่อยที่กำหนดไม่อยู่ในสตริงหลัก

mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("The position of Tutorials using find() : ", mystring.find("test"))
print("The position of Tutorials using index() : ", mystring.index("test"))

Output:

The position of Tutorials using find() :  -1
Traceback (most recent call last):
  File "task1.py", line 3, in <module>
    print("The position of Tutorials using index() : ", mystring.index("test"))
ValueError: substring not found

ในตัวอย่างข้างต้น เราพยายามหาตำแหน่งของสตริงย่อย "test" สตริงย่อยนี้ไม่มีอยู่ในสตริงที่กำหนด ดังนั้นเมื่อใช้ find() เราจะได้ตำแหน่งเป็น -1 แต่เมื่อใช้ index() จะเกิดข้อผิดพลาดดังที่แสดงไว้ข้างต้น

เพื่อค้นหาจำนวนรวมของสตริงย่อย

ในการหาจำนวนครั้งทั้งหมดที่สตริงย่อยปรากฏในสตริงที่กำหนด เราจะใช้ฟังก์ชัน find() Pythonเราจะวนลูปผ่านสตริงโดยใช้ลูป for ตั้งแต่ 0 จนถึงจุดสิ้นสุดของสตริง โดยใช้พารามิเตอร์ startIndex สำหรับฟังก์ชัน find()

ตัวแปร startIndex และ count จะถูกกำหนดค่าเริ่มต้นเป็น 0 ภายในลูป for เราจะตรวจสอบว่าสตริงย่อยนั้นมีอยู่ในสตริงที่กำหนดหรือไม่ โดยใช้ฟังก์ชัน find() โดยกำหนดค่า startIndex เป็น 0

ค่าที่ส่งคืนจาก find() หากไม่ใช่ -1 จะอัปเดต startIndex เป็นดัชนีที่พบสตริง และเพิ่มค่า count ขึ้นอีกหนึ่งค่าด้วย

นี่คือตัวอย่างการทำงาน:

my_string = "test string test, test string testing, test string test string"
startIndex = 0
count = 0
for i in range(len(my_string)):
    k = my_string.find('test', startIndex)
    if(k != -1):
        startIndex = k+1
        count += 1
        k = 0
print("The total count of substring test is: ", count )

Output:

The total count of substring test is:  6

» เรียนรู้เพิ่มเติมเกี่ยวกับ Python แยกสตริง ()

คำถามที่พบบ่อย

ใช่แล้ว find() จะจับคู่สตริงย่อยอย่างแม่นยำ ดังนั้น “Hello”.find(“h”) จะคืนค่า -1 ในขณะที่ “Hello”.find(“H”) จะคืนค่า 0 หากต้องการค้นหาแบบไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก ให้แปลงสตริงด้วย lower() หรือ upper() ก่อน

ตัวดำเนินการ `in` จะส่งคืนค่า `True` หรือ `False` เท่านั้น เพื่อแสดงว่ามีสตริงย่อยอยู่หรือไม่ ส่วน `find()` จะทำงานมากกว่านั้น โดยจะส่งคืนดัชนีที่แน่นอนของการจับคู่ครั้งแรก หรือ -1 เมื่อไม่มีสตริงย่อยนั้นอยู่

ใช่แล้ว ฟังก์ชัน find() ยอมรับดัชนีเริ่มต้นและสิ้นสุดที่เป็นค่าลบ ซึ่งจะนับจากท้ายสตริง ตัวอย่างเช่น “Guru99”.find(“9”, -2) ค้นหาเฉพาะอักขระสองตัวสุดท้ายและส่งคืนตำแหน่งของอักขระเหล่านั้น

เมธอด str.find() จะค้นหาการจับคู่ทีละรายการ หากต้องการค้นหาการจับคู่ทั้งหมดในการเรียกครั้งเดียว ให้ใช้โมดูล re: re.findall() จะส่งคืนสตริงย่อยที่ตรงกันทั้งหมด และ re.finditer() จะส่งคืนอ็อบเจ็กต์การจับคู่พร้อมตำแหน่งเริ่มต้นแต่ละรายการ

เมธอด `find()` ใช้ได้เฉพาะกับสตริงเท่านั้น ดังนั้นการเรียกใช้เมธอดนี้กับลิสต์จะทำให้เกิดข้อผิดพลาด `AttributeError` หากต้องการค้นหารายการในลิสต์หรือทูเปิล ให้ใช้เมธอด `index()` แทน ซึ่งจะส่งคืนตำแหน่งของรายการที่ตรงกันรายการแรก

ใช่แล้ว สำหรับการค้นหาสตริงย่อยแบบง่ายๆ ฟังก์ชัน find() นั้นเขียนด้วยภาษา C และทำงานได้เร็วกว่าการคอมไพล์นิพจน์ปกติ ควรใช้โมดูล re ก็ต่อเมื่อต้องการค้นหารูปแบบ ตัวอักษรตัวแทน หรือการจับคู่หลายรายการเท่านั้น

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

ใช่แล้ว GitHub Copilot จะเติมคำอัตโนมัติสำหรับการเรียกใช้ find(), rfind() และ index() จากคำอธิบายสั้นๆ ที่บอกถึงเป้าหมายของคุณ เครื่องมือ AI ของ Agentic ทำได้มากกว่านั้น โดยจะเขียนตรรกะการค้นหา เพิ่มอาร์กิวเมนต์ start และ end และทำการทดสอบให้คุณด้วย

สรุปโพสต์นี้ด้วย: