التعبيرات العادية في بايثون [مع أمثلة]: كيف يتم التنفيذ؟

نشرت: 2021-01-29

أثناء معالجة البيانات الأولية من أي مصدر ، يعد استخراج المعلومات الصحيحة أمرًا مهمًا حتى يمكن الحصول على رؤى ذات مغزى من البيانات. في بعض الأحيان يكون من الصعب إخراج النمط المحدد من البيانات خاصة في حالة البيانات النصية.

تتكون البيانات النصية من فقرات من المعلومات التي تم جمعها عبر نماذج الاستطلاع ، وإلغاء المواقع الإلكترونية ، ومصادر أخرى. يمكن أن يؤدي تغيير موصّل السلسلة المختلفة مع وظائف الباندا أو الوظائف المخصصة الأخرى إلى إنجاز العمل ، ولكن ماذا لو كان يلزم الحصول على نمط أكثر تحديدًا؟ التعبيرات العادية تقوم بهذه المهمة بسهولة.

جدول المحتويات

ما هو التعبير العادي (RegEx)؟

التعبير العادي هو تمثيل لمجموعة من الأحرف للسلاسل. يقدم صيغة معممة لنمط معين في السلاسل التي تساعد في فصل المعلومات الصحيحة عن مجموعة البيانات. يتكون التعبير عادةً من رموز أو أحرف تساعد في تشكيل القاعدة ، ولكن للوهلة الأولى ، قد يبدو غريبًا ويصعب فهمه. هذه الرموز لها معاني موصوفة هنا.

تعلم دورات علوم البيانات من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.

الأحرف الوصفية في RegEx

  1. ".": هو حرف بدل ، يطابق حرفًا واحدًا (أي حرف ، ولكن مرة واحدة فقط)
  2. ^: يشير إلى بداية السلسلة
  3. $: يشير إلى نهاية السلسلة
  4. []: تطابق إحدى مجموعات الأحرف داخل []
  5. [az]: يطابق أحد نطاق الأحرف a ، b ، ... ، z
  6. [^ abc]: يتطابق مع حرف ليس a أو b أو c.
  7. a | b: يطابق إما a أو b ، حيث a و b عبارة عن سلاسل
  8. (): يوفر تحديد النطاق للمشغلين
  9. \: يُمكّن الهروب للأحرف الخاصة (\ t ، \ n ، \ b ، \.)
  10. \ b: تطابق حدود الكلمة
  11. \ d: أي رقم يكافئ [0-9]
  12. \ D: أي ليس رقمًا ، يعادل [^ 0-9]
  13. \ s: أي مسافة بيضاء ، مكافئة لـ [\ t \ n \ r \ f \ v]
  14. \ S: أي مسافة غير بيضاء ، مكافئة لـ [^ \ t \ n \ r \ f \ v]
  15. \ w: أي حرف أبجدي رقمي يعادل [a-zA-Z0-9_]
  16. \ W: أي غير أبجدي رقمي ، يعادل [^ a-zA-Z0-9_]
  17. '*': يطابق صفرًا أو أكثر من التكرارات
  18. "+": يطابق تكرارًا واحدًا أو أكثر
  19. '؟': تطابق صفر أو حدث واحد
  20. {n}: تكرار n بالضبط ، n> = 0
  21. {n،}: على الأقل عدد n من التكرار
  22. {، n}: عدد مرات التكرار على الأكثر
  23. {m، n}: على الأقل m من التكرار و n على الأكثر

أمثلة لفهم الحل البديل

الآن بعد أن أصبحت على دراية بالأحرف التي تشكل RegEx ، دعنا نرى كيف يعمل هذا:

1. تصفية البريد الإلكتروني:

افترض أنك تريد تصفية جميع معرّفات البريد الإلكتروني من فقرة طويلة. التنسيق العام للبريد الإلكتروني هو:

اسم المستخدم @ domain_name. <top_level_domain>

يمكن أن يكون اسم المستخدم أبجديًا رقميًا ، وبالتالي ، يمكننا استخدام \ w للإشارة إليها ولكن هناك احتمال أن ينشئ المستخدم حسابًا باسم firstName. لمعالجة هذا ، سوف نتخطى النقطة وننشئ مجموعة من الشخصيات. بعد ذلك ، يجب أن يكون domain_name أبجديًا فقط ، وبالتالي ، فإن A-Za-z سيشير إلى ذلك. عادةً ما يكون نطاق المستوى الأعلى هو .com ، .in ، .org ولكن بناءً على حالة الاستخدام ، يمكنك اختيار النطاق الأبجدي بالكامل أو تصفية المجالات المحددة.

سيبدو التعبير النمطي لهذا كما يلي:

^ ([a-zA-Z0-9 _.] +) @ ([a-zA-Z0-9 -] +) \. ([a-zA-Z] {2،4}) $

هنا يتم أيضًا الإعلان عن بداية النموذج ونهايته ، كما يمكن أن يحتوي نطاق المستوى الأعلى على 2-4 أحرف فقط. التعبير كله له 3 مجموعات.

2. تصفية التواريخ:

قد تحتوي المعلومات النصية التي تستخرجها على التواريخ ولا يتوفر لك عمود منفصل. التواريخ هي عامل أساسي يساعد في تصفية البيانات أو تحليل السلاسل الزمنية. يأخذ تاريخ معين تنسيق التاريخ / الشهر / السنة ، حيث يمكن تبادل التاريخ والشهر.

أيضًا ، يمكن أن تكون الأشهر رقمية بالإضافة إلى شكل أبجدي وبحروف أبجدية إما بالاختصارات أو الأسماء الكاملة. يعتمد بشكل أساسي على عدد الحالات الموجودة في بياناتنا ولا يمكن تحقيقه إلا عن طريق النتائج والمحاكمة.

فيما يلي نموذج RegEx بسيط يغطي مجموعة متنوعة من التواريخ:

^ (\ d {1،2}) [/ -] (\ d {1،2}) [/ -] (\ d {2،4}) $

يلتقط هذا النمط تنسيق التاريخ بواصلة أو شرطة مائلة للأمام. يقتصر التاريخ والشهر على رقم واحد أو رقمين والسنة بحد أقصى أربعة 0 رقمًا. يتم التقاط الكيانات المعنية كمجموعات اختيارية في هذه الحالة.

اقرأ أيضًا: أفكار وموضوعات مشروع Python

كيف يتم تنفيذه في بايثون؟

إن التعبيرات العادية التي أنشأناها تفي بالمعايير المعنية التي افترضناها والآن حان الوقت لتطبيقها في كود Python. تحتوي Python على وحدة نمطية مضمنة تسمى re module التي تنفذ عمل هذه التعبيرات. ببساطة،

إعادة الاستيراد

النمط = '^ (\ d {1،2}) [/ -] (\ d {1،2}) [/ -] (\ d {2،4}) $'

تقدم الوحدة النمطية Re مجموعة واسعة من الوظائف ولكل منها حالات استخدام مختلفة. لنلقِ نظرة على بعض الوظائف المهمة:

  1. re.findall (): تعرض هذه الوظيفة قائمة بجميع التطابقات في سلسلة الاختبار بناءً على النمط الذي تم تمريره. ضع في اعتبارك هذا المثال:

سلسلة = '25 -12-1999 نص عشوائي هنا 25/12/1999 '

طباعة (re.findall (نمط ، سلسلة))

سيعود فقط التواريخ من السلسلة في القائمة.

  1. re.sub (): يشير Sub في هذه الوظيفة إلى الاستبدال ويفعل الشيء نفسه. يستبدل التطابقات بقيمة الاستبدال المقدمة. تأخذ الوظيفة النمط والسلسلة وقيمة الاستبدال والمعلمة الاختيارية للعدد. تتحكم معلمة العد في عدد التكرارات التي تريد استبدالها. بشكل افتراضي ، يستبدل كل منهم ويعيد السلسلة الجديدة.
  2. re.split (): يقسم السلسلة في المواقع المتطابقة ويعيد الأجزاء كسلاسل منفصلة في قائمة.
  3. re.search (): تقوم هذه الوظيفة بإرجاع كائن المطابقة الذي يحتوي على التطابق الموجود في السلسلة جنبًا إلى جنب مع جميع المجموعات التي تم التقاطها. يمكن أن يكون مفيدًا عندما تريد تخزين هذه المجموعات كأعمدة منفصلة.

للقيام بذلك:

match = re.search (نمط ، سلسلة)

match.group (1)

تعيد المجموعة (0) المباراة الكاملة وتشير الأرقام التالية المقابلة إلى مجموعات أخرى.

الدفع: راتب Python Developer في الهند

خاتمة

التعبيرات العادية هي طريقة فعالة لالتقاط الأنماط في البيانات النصية. قد يستغرق الأمر بعض الجهد الإضافي للسيطرة على الشخصيات المختلفة ولكنه يبسط عملية استخراج البيانات في حالات الاستخدام المعقدة.

أعط بعض الأمثلة على التعبيرات العادية في بايثون.

توضح الأمثلة التالية التعبيرات الوظيفية أو العادية في Python:
أ. تصفية البريد الإلكتروني
يمكن استخدام التعبيرات العادية بكفاءة لتصفية رسائل البريد الإلكتروني. الصيغة العادية لتصفية البريد الإلكتروني هي - ^ ((a-zA-Z0-9 _.) +) @ ((a-zA-Z0-9 -) +). ((a-zA-Z) {2،4} ) $
ينقسم هذا التعبير إلى ثلاث مجموعات ويتعامل مع العديد من الحالات بما في ذلك - عندما يكون اسم المستخدم أبجديًا رقميًا وعندما يكون به نقطة ، على سبيل المثال ، "first.last @". سيتم استخدام هذا التعبير لأهم المجالات التي تحتوي على 2-4 أحرف.
ب. تصفية التمور
يمكن أن تكون التواريخ عاملاً حاسمًا أثناء معالجة تصفية البيانات. غالبًا ما تحتوي البيانات النصية التي تتعامل معها على تواريخ. التعبير العادي أو التعبير العادي الذي يستخرج البيانات من نص عادي هو - ^ (d {1،2}) (/ -) (d {1،2}) (/ -) (d {2،4}) $
يمكن أن يصل التاريخ والشهر إلى رقمين بينما يمكن أن يصل الشهر إلى 4 أرقام.

ما هي الوظائف التي ينطوي عليها تنفيذ التعبيرات النمطية في بايثون؟

يتم تضمين الوظائف التالية في تنفيذ التعبيرات النمطية في Python:
1. re.findall () - تقبل هذه الوظيفة النمط الذي سيتم مطابقته مع السلسلة النصية. تقوم بإرجاع السلاسل المتطابقة.
2. re.sub () - Sub في "re.sub" لتقف على "استبدال". تؤدي هذه الطريقة بالضبط نفس الوظيفة التي تؤديها وظيفة "re.findall ()".
3. re.split () - يفصل بين السلاسل حول الفاصل الذي سيتم تمريره إليه كمعامل. يمكن أن يكون الفاصل أي شيء.
4. re.search () - تعرض هذه الوظيفة التطابق الموجود في السلسلة جنبًا إلى جنب مع مجموعات السلاسل الأخرى التي تم التقاطها.

ما هي بعض التسلسلات الخاصة المستخدمة في التعبيرات النمطية؟

فيما يلي بعض التسلسلات الخاصة المستخدمة في التعبيرات النمطية:
1. أ: تحقق مما إذا كانت السلسلة تبدأ بالحرف المحدد.
2. (شرطة مائلة للأمام) ب: للتحقق مما إذا كانت السلسلة تبدأ أو تنتهي بالحرف المحدد. (سلسلة) / b يتحقق من البداية بينما (شرطة مائلة للخلف) b (سلسلة) يتحقق من النهاية.
3. ب: هو بالضبط عكس ب. للتحقق مما إذا كانت السلسلة لا تبدأ بالحرف المحدد.
4. د: للتحقق من القيم العددية في السلسلة.
5. D: للتحقق من أي قيمة أو حرف غير عددية.
6. s: للتحقق من أي حرف مسافة بيضاء.
7. S: للتحقق من عدم وجود مسافة بيضاء.
8. w: للتحقق من أي حرف أبجدي رقمي.
9. W: للتحقق من أي حرف غير أبجدي رقمي.