fbpx

تعلم لغة البايثون – الدرس السادس عشر التعابير النمطية في بايثون Python Regular Expressions

0

تعد التعبيرات العادية (التي يتم اختصارها أحيانًا إلى regexp أو regex أو re) أداة لمطابقة الأنماط في النص. في Python ، لدينا الوحدة النمطية re. إن تطبيقات التعبيرات العادية منتشرة على نطاق واسع ، لكنها معقدة إلى حد ما ، لذلك عند التفكير في استخدام التعبير العادي في مهمة معينة ، فكر في البدائل ، وتأتي إلى التعبيرات المعتادة كملاذ أخير.

مثال للتعبير العادي هو r “^ (From | To | Cc). ؟ [email protected]” الآن للحصول على شرح: تطابق علامة الإقحام ^ مع النص في بداية السطر. المجموعة التالية ، الجزء الذي يحتوي على (From|To|Cc) يعني أن السطر يجب أن يبدأ بإحدى الكلمات التي يتم فصلها بواسطة الأنبوب | وهذا ما يسمى عامل التشغيل OR ، وسيتطابق التعبير العادي إذا بدأ السطر بأي من الكلمات في المجموعة. ال .؟ يعني أن تطابق أي عدد من الأحرف بشكل غير طمع ، باستثناء سطر سطر جديد \ n. الجزء غير الجشع يعني مطابقة أقل عدد ممكن من التكرار. ال . الحرف يعني أي حرف غير سطر جديد ، يعني الرمز * تكرار 0 أو أكثر ، و؟ الطابع يجعلها غير طماع.

لذلك ، ستتم مطابقة الأسطر التالية مع هذا التعبير العادي: From: [email protected] To:! asp] <،. [email protected]

يتوفر مرجع كامل لإعادة بناء الجملة في مستندات بايثون.

كمثال على التعبير العادي “المناسب” لمطابقة البريد الإلكتروني (مثل ذلك الموجود في التمرين) ، راجع هذا

# مثال:
import re
pattern = re.compile(r"\[(on|off)\]") # Slight optimization
print(re.search(pattern, "Mono: Playback 65 [75%] [-16.50dB] [on]"))
# Returns a Match object!
print(re.search(pattern, "Nada...:-("))
# لا تعيد أي شيء.
# مثال نهائي

# التمرين: قم بعمل تعبير عادي يطابق البريد الإلكتروني
def test_email(your_pattern):
    pattern = re.compile(your_pattern)
    emails = ["[email protected]", "[email protected]", "wha.t.`1an?ug{}[email protected]"]
    for email in emails:
        if not re.match(pattern, email):
            print("You failed to match %s" % (email))
        elif not your_pattern:
            print("Forgot to enter a pattern!")
        else:
            print("Pass")
pattern = r"" # Your pattern here!
test_email(pattern)

الحل

# التمرين: قم بعمل تعبير عادي يطابق البريد الإلكتروني
import re
def test_email(your_pattern):
    pattern = re.compile(your_pattern)
    emails = ["[email protected]", "[email protected]", "wha.t.`1an?ug{}[email protected]"]
    for email in emails:
        if not re.match(pattern, email):
            print("You failed to match %s" % (email))
        elif not your_pattern:
            print("Forgot to enter a pattern!")
        else:
            print("Pass")
# نمطك هنا!
pattern = r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?"
test_email(pattern)

سنحصل على النتيجة التالية عند التشغيل

<script.py> output:
    Pass
    Pass
    Pass

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني.