تعلم لغة البايثون – الدرس السادس عشر التعابير النمطية في بايثون Python Regular Expressions
تعد التعبيرات العادية (التي يتم اختصارها أحيانًا إلى 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