اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

هنالك العديد من الحلول لإيجاد التكرار في سلسلة نصية، فيمكنك على سبيل المثال استعمال هذا الحل لأنه يتجنب التعابير العادية (regular expressions) والبطء في حلقات التكرار في البايثون:

def principal_period(s):
    i = (s+s).find(s, 1, -1)
    return None if i == -1 else s[:i]

وهذا حل آخر لكن باستخدام التعابير العادية:

import re

REPEATER = re.compile(r"(.+?)\1+$")

def repeated(s):
    match = REPEATER.match(s)
    return match.group(1) if match else None

سأقوم بشرح التعبير (.+?)\1+$ لذلك قمت بتقسيمه إلى ثلاثة أجزاء:

  • (.+?) سوف يقوم بمقارنة مجموعة تحتوي على الأقل على واحد من أي حرف.
  • \1+ سوف يتأكد من تكرار واحد في مجموعة المطابقة في الجزء الأول.
  • $ سوف يتأكد من نهاية السلسلة النصية ولقد وضعناه للتأكد من أنه لا يوجد أي إضافات.

أرجو أن يكون الشرح سهلا.

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...