توثيق وحدة Re لـ Python 3 بتنسيق. وحدة Re للتعبيرات العادية

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

اليوم سنتحدث بالتفصيل عن ماهيته بشكل عام ، وكيفية العمل معهم وكيفية الوحدة re سوف يساعد.

التعبيرات العادية: مقدمة

ما هي استخدامات التعبيرات النمطية؟ الكل تقريبا. على سبيل المثال ، هذه:

  1. تطبيقات الويب التي تتطلب التحقق من صحة النص. مثال نموذجي هو عملاء البريد عبر الإنترنت.
  2. أي مشاريع أخرى تتعلق بالنصوص وقواعد البيانات وما إلى ذلك.

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

ما هو القالب في مكتبة Re؟

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

على سبيل المثال ، خذ النموذج التالي: s+. هذا يعني أي حرف مسافة. إذا قمت بإضافة علامة الجمع إليها ، فهذا يعني أن النمط يتضمن أكثر من مسافة واحدة. يمكن أن تتطابق حتى مع أحرف الجدولة التي يتم استدعاؤها بـ t+.

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

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

>>> regex = re.compile ('s +')

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

الحصول على معلومات منفصلة من سلاسل مختلفة باستخدام التعبيرات العادية

افترض أن لدينا متغيرًا يحتوي على المعلومات التالية.

>>> text = "" "100 INF Informatics

213 MAT الرياضيات  

156 ENG انجليزي »» »

يحتوي على ثلاث دورات تدريبية. يتكون كل جزء من ثلاثة أجزاء - الرقم والرمز والاسم. نرى أن الفترة الفاصلة بين هذه الكلمات مختلفة. ماذا تفعل لتقسيم هذا السطر إلى أرقام وكلمات منفصلة؟ هناك طريقتان لتحقيق هذا الهدف:

  1. استدعاء وظيفة إعادة الانقسام.
  2. تطبيق الوظيفة انقسم For رجإكس.

فيما يلي مثال على استخدام بناء الجملة لكل طريقة من طرق المتغير الخاص بنا.

>>> re.split ('s +'، text)  

# أو

>>> regex.split (نص)

الإخراج: ['100'، 'INF'، 'Computer Science'، '213'، 'MAT'، 'Math'، '156'، 'ENG'، 'English']

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

البحث عن التطابقات مع ثلاث وظائف

لنفترض أننا بحاجة إلى استخراج أرقام فقط من سلسلة. ما الذي يجب القيام به من أجل هذا؟

re.findall ()

هنا حالة استخدام للوظيفة جد كل()، والذي يسمح لك ، مع التعبيرات العادية ، باستخراج تكرارات رقم واحد أو أكثر من متغير نصي.

>>> طباعة (نص)  

100 INF المعلوماتية

213 MAT الرياضيات  

156 ENG الإنجليزية

>>> regex_num = re.compile ('d +')  

>>> regex_num.findall (نص)  

['100'، '213'، '156']

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

يمكنك أيضًا استخدام علامة * لتحديد أن وجود رقم غير مطلوب للعثور على تطابق.

لكن في حالتنا ، نظرًا لأننا استخدمنا + ، استخرجنا بـ جد كل() 1 أو أكثر من التعيينات الرقمية للدورات من النص. وبالتالي ، في حالتنا ، تعمل التعبيرات العادية كإعدادات للوظيفة.

re.search () مقابل مباراة العودة()

كما يمكنك التخمين من اسم الوظائف ، فإن البحث الأول عن تطابق في النص. سؤال: ما الفرق بين جد كل؟ النقطة المهمة هي أنها تُرجع كائنًا معينًا يطابق النمط ، وليس التسلسل الكامل للنتائج التي تم العثور عليها في شكل قائمة ، مثل الوظيفة السابقة.

في المقابل ، تقوم وظيفة re.match بالشيء نفسه. فقط بناء الجملة مختلف. يجب وضع القالب في البداية. 

لنأخذ مثالاً يوضح ذلك.

>>> # إنشاء متغير مع النص

>>> text2 = «» »INF Informatics

213 MAT الرياضيات 156 ″ »»  

>>> # تجميع regex والبحث عن الأنماط

>>> regex_num = re.compile ('d +')  

>>> s = regex_num.search (text2)  

>>> طباعة ('الفهرس الأول:'، s.start ())  

>>> طباعة ('الفهرس الأخير:'، s.end ())  

>>> طباعة (نص 2 [s.start (): s.end ()]) 

الفهرس الأول: 17 

الفهرس الأخير: 20

213

إذا كنت ترغب في الحصول على نتيجة مماثلة بطريقة مختلفة ، يمكنك استخدام الوظيفة مجموعة().

استبدال جزء من النص بمكتبة Re

لاستبدال النص ، استخدم الوظيفة re.sub (). لنفترض أن قائمة دوراتنا قد تغيرت قليلاً. نرى أنه بعد كل قيمة رقمية لدينا علامة تبويب. مهمتنا هي دمج كل هذه المتتالية في سطر واحد. للقيام بذلك ، علينا استبدال التعبير s + لتمرير 

النص الأصلي كان:

# إنشاء متغير مع النص

>>> text = "" "100 INF t Informatics

213 مات ر الرياضيات  

156 ENG t الإنجليزية »» »  

>>> طباعة (نص)  

100 معلومات علوم الكمبيوتر

213،XNUMX،XNUMX،XNUMX مات الرياضيات  

156 ANG عربي

لإجراء العملية المطلوبة ، استخدمنا سطور التعليمات البرمجية التالية.

# استبدل مساحة واحدة أو أكثر بـ 1

>>> regex = re.compile ('s +')  

>>> طباعة (regex.sub ("، نص))  

نتيجة لذلك ، لدينا سطر واحد. 

101 كمبيوتر COM 205 MAT الرياضيات 189 ENG الإنجليزية

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

المكتبة Re يدعم ميزة مثل المطابقة السلبية. وهو يختلف عن الخط المباشر في احتوائه على علامة تعجب قبل الشرطة المائلة. بمعنى ، إذا أردنا تخطي حرف السطر الجديد ، فعلينا كتابة! n بدلاً من n.

نحصل على الكود التالي.

# إزالة جميع المسافات ما عدا السطر الجديد  

>>> regex = re.compile ('((؟! n) s +)')  

>>> طباعة (regex.sub ("، نص))  

100 INF المعلوماتية

213 MAT الرياضيات  

156 ENG الإنجليزية

ما هي مجموعات التعبير العادي؟

بمساعدة مجموعات التعبيرات العادية ، يمكننا الحصول على الكائنات المطلوبة في شكل عناصر منفصلة ، وليس في سطر واحد. 

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

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

سيكون هناك عدد قليل جدًا من الأسطر. 

# إنشاء مجموعات من قوالب نصوص الدورة واستخراجها

>>> course_pattern = '([0-9] +) s * ([A-ZY] {3}) s * ([a-zA-ZoY] {4،})'  

>>> إعادة البحث (نمط الدورة التدريبية ، نص)  

[('100'، 'INF'، 'Computer Science')، ('213'، 'MAT'، 'Math')، ('156'، 'ENG'، 'English')]

مفهوم المطابقة "الجشع"

وفقًا للمعايير ، تتم برمجة التعبيرات العادية لاستخراج أكبر قدر ممكن من البيانات المطابقة. وحتى لو كنت بحاجة إلى أقل من ذلك بكثير.

دعنا نلقي نظرة على نموذج كود HTML حيث نحتاج إلى الحصول على العلامة.

>>> text = "مثال على مطابقة التعبير العادي الطائش"  

>>> re.findall ("، نص)  

["مثال على مطابقة التعبير العادي الجشعة"]

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

وماذا تفعل للحصول على العلامة فقط؟ في هذه الحالة ، تحتاج إلى استخدام المطابقة البطيئة. لتحديد مثل هذا التعبير ، يتم إضافة علامة استفهام إلى نهاية النمط.

ستحصل على الكود التالي وإخراج المترجم الفوري.

>>> re.findall ("، نص)  

["،"]

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

re.search ('' ، text) .group ()  

"

ثم سيتم العثور على علامة الافتتاح فقط.

قوالب التعبير الشائعة

فيما يلي جدول يحتوي على أنماط التعبير العادي الأكثر استخدامًا.

توثيق وحدة Re لـ Python 3 بتنسيق. وحدة Re للتعبيرات العادية

وفي الختام

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

تسمح لك بأداء مهام مثل:

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

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

اترك تعليق