Python طريقة العثور على السلسلة () مع الأمثلة

⚡ ملخص ذكي

Python الدالة `find()` هي دالة مدمجة تُعيد فهرس أول ظهور لسلسلة فرعية داخل سلسلة نصية. تُعيد الدالة القيمة -1 في حال عدم وجود السلسلة الفرعية، لتجنب حدوث استثناءات.

  • 🔍 بناء الجملة: تأخذ الدالة find() سلسلة فرعية بالإضافة إلى مؤشرات البداية والنهاية الاختيارية لتقييد نطاق البحث.
  • 🎯 المباراة الأولى: تقوم الدالة find() بإرجاع أدنى فهرس لأول ظهور، مع المسح من اليسار إلى اليمين.
  • غير موجود: تقوم الدالة find() بإرجاع القيمة -1 بدلاً من إظهار خطأ عند غياب السلسلة الفرعية.
  • 🔁 rfind (): تقوم الدالة rfind() بإرجاع أعلى فهرس، مع البحث من الجانب الأيمن بدلاً من ذلك.
  • ⚠️ فهرس(): تتصرف طريقة index() مثل find() ولكنها تثير خطأ ValueError عندما تكون السلسلة الفرعية مفقودة.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم برامج المساعدة البرمجية المدعومة بالذكاء الاصطناعي بإنشاء منطق find() وتعزيز البحث عن السلاسل الفرعية في مسارات معالجة النصوص الطبيعية.

Python العثور على سلسلة ()

ما هي تفاصيل Python العثور على سلسلة ()؟

Python العثور على سلسلة () هي وظيفة متاحة في Python مكتبة لإيجاد فهرس أول ظهور لسلسلة فرعية ضمن سلسلة نصية معينة. تُرجع الدالة find() القيمة -1 بدلاً من طرح استثناء عندما لا تكون السلسلة الفرعية المحددة موجودة في السلسلة النصية المعطاة. وهي إحدى... Pythonالأكثر استخدامًا طرق السلسلة لتحديد موقع النص.

بناء جملة Python العثور على سلسلة ()

البنية الأساسية لملف Python وظيفة البحث () هي كما يلي:

string.find(substring,start,end)

معلمات طريقة البحث ().

فيما يلي المعاملات الثلاثة للدالة find() في Python:

  • سلسلة فرعية: السلسلة الفرعية التي تريد البحث عنها في السلسلة المعطاة.
  • بداية(اختياري) قيمة البداية التي سيبدأ منها البحث عن السلسلة الفرعية. القيمة الافتراضية هي 0.
  • النهاية(اختياري) القيمة النهائية التي سينتهي عندها البحث عن السلسلة الفرعية. القيمة الافتراضية هي طول السلسلة.

مثال على طريقة find() بالقيم الافتراضية

المعلمات التي تم تمريرها إلى Python تتضمن دالة find() السلسلة الفرعية، أي السلسلة التي تريد البحث عنها، بالإضافة إلى نقطتي البداية والنهاية. قيمة البداية هي 0 افتراضيًا، وقيمة النهاية هي طول السلسلة.

في هذا المثال، سنستخدم طريقة find() في Python مع القيم الافتراضية.

ستبحث الدالة find() عن السلسلة الفرعية وتُحدد موضع أول ظهور لها. حتى لو تكررت السلسلة الفرعية عدة مرات في السلسلة النصية المُعطاة، فستُعيد الدالة فهرس أو موضع أول ظهور لها.

على سبيل المثال:

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

الإخراج:

The position of Tutorials is at: 12

مثال على find() باستخدام وسيطة البداية

يمكنك البحث عن السلسلة الفرعية في السلسلة المعطاة وتحديد موضع البداية الذي سيبدأ منه البحث. يمكن استخدام مُعامل البداية لهذا الغرض.

يحدد المثال أدناه موضع البداية على أنه 20، وطريقة البحث () في Python سيبدأ البحث من الموضع 20. هنا، سيكون موضع النهاية هو طول السلسلة، لذلك يبحث حتى نهاية السلسلة من الموضع 20 فصاعدًا.

على سبيل المثال:

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

الإخراج:

The position of Tutorials is at 48

مثال على find() باستخدام وسيطتي البداية والنهاية

باستخدام معلمات البداية والنهاية، يمكننا تحديد نطاق البحث بدلاً من البحث في السلسلة بأكملها.

على سبيل المثال:

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

الإخراج:

The position of Tutorials is at 12

مثال على استخدام دالة find() للعثور على موضع سلسلة فرعية معينة في سلسلة نصية

نعلم أن الدالة `find()` تساعدنا في إيجاد فهرس أول ظهور لسلسلة فرعية. تُرجع الدالة القيمة -1 إذا لم تكن السلسلة الفرعية موجودة في السلسلة النصية المُعطاة. يوضح المثال أدناه الفهرس عندما تكون السلسلة النصية موجودة، والقيمة -1 عندما لا تكون السلسلة الفرعية التي نبحث عنها موجودة.

على سبيل المثال:

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

الإخراج:

The position of أفضل site is at: 27
The position of Guru99 is at: -1

Python سلسلة rfind()

استخدم Python تُشبه الدالة rfind() الدالة find()، والفرق الوحيد بينهما هو أن rfind() تُعطي أعلى فهرس للسلسلة الفرعية المُعطاة، بينما تُعطي find() أدنى فهرس، أي الفهرس الأول. تُعيد كلتا الدالتين rfind() و find() القيمة -1 إذا لم تكن السلسلة الفرعية موجودة.

في المثال أدناه، لدينا سلسلة نصية "Meet" Guru99 موقع الدروس. أفضل موقع ل Python الدروس"!" وسيحاول البرنامج إيجاد موضع السلسلة الفرعية "Tutorials" باستخدام الدالتين find() و rfind(). تظهر السلسلة الفرعية "Tutorials" مرتين في السلسلة.

فيما يلي مثال حيث يتم استخدام كل من find() و rfind().

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

الإخراج:

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.

فيما يلي مثال عملي يوضح سلوك الفهرس () والعثور على ().

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

الإخراج:

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

نحصل على نفس الموضع باستخدام كل من الدالتين find() و index(). لنرَ مثالاً عندما لا تكون السلسلة الفرعية المُعطاة موجودة في السلسلة.

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

الإخراج:

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 إلى الفهرس الذي تم العثور فيه على السلسلة، وسيتم أيضًا زيادة قيمة العد.

هذا مثال عملي:

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 )

الإخراج:

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 فقط عندما تحتاج إلى أنماط أو أحرف بدل أو نتائج متعددة.

في مجال التعلم الآلي ومعالجة اللغات الطبيعية، تُستخدم دالة find() لتحديد الكلمات المفتاحية أو الوسوم أو الفواصل أثناء تنظيف النص وتقسيمه إلى رموز. ويساعد اكتشاف وجود سلسلة فرعية، أو موقعها، في بناء الميزات وتحليل مدخلات النموذج.

نعم. يُكمل GitHub Copilot تلقائيًا استدعاءات find() و rfind() و index() بناءً على تعليق قصير يصف هدفك. أما أدوات الذكاء الاصطناعي الوكيل فتتجاوز ذلك، إذ تكتب منطق البحث، وتضيف وسيطات البداية والنهاية، وتُجري اختباراتك.

تلخيص هذه التدوينة بـ: