مستندات ماژول Re برای پایتون 3 در. ماژول Re برای عبارات منظم

عبارات منظم جزء بسیار محبوب تقریباً هر زبان برنامه نویسی هستند. آنها به شما کمک می کنند تا به سرعت به اطلاعات مورد نیاز خود دسترسی پیدا کنید. مخصوصاً در مواقعی که پردازش متن ضروری است از آنها استفاده می شود. پایتون به طور پیش فرض با یک ماژول خاص عرضه می شود. re، که وظیفه کار با عبارات منظم را بر عهده دارد.

امروز با جزئیات در مورد اینکه به طور کلی چیست، نحوه کار با آنها و نحوه ماژول صحبت خواهیم کرد re کمک خواهد کرد.

عبارات منظم: یک مقدمه

کاربرد عبارات منظم چیست؟ تقریبا همه. مثلاً اینها:

  1. برنامه های کاربردی وب که نیاز به تایید متن دارند. یک مثال معمولی، سرویس گیرندگان پست الکترونیکی آنلاین است.
  2. هر پروژه دیگری که مربوط به متون، پایگاه داده و غیره باشد.

قبل از شروع تجزیه نحو، باید اصول اساسی عملکرد کتابخانه را با جزئیات بیشتری درک کنیم. re و به طور کلی، آنچه در مورد آن به طور کلی خوب است. ما همچنین نمونه هایی از عمل واقعی ارائه خواهیم داد، جایی که مکانیسم استفاده از آنها را شرح خواهیم داد. شما می توانید چنین قالبی بسازید که برای انجام عملیات های مختلف با متن مناسب باشد.

قالب در کتابخانه Re چیست؟

با استفاده از آن، می توانید اطلاعات انواع مختلف را جستجو کنید، اطلاعات مربوط به آنها را به دست آورید تا سایر عملکردها را تطبیق پذیرتر کنید. و البته برای پردازش این داده ها.

به عنوان مثال، الگوی زیر را در نظر بگیرید: s+. به معنای هر شخصیت فضایی است. اگر یک علامت مثبت به آن اضافه کنید، به این معنی است که الگوی بیش از یک فاصله دارد. حتی می تواند کاراکترهای برگه ای را که با آنها فراخوانی می شوند مطابقت دهد t+.

قبل از استفاده از آنها، باید کتابخانه را وارد کنید Re. پس از آن، از یک دستور خاص برای کامپایل قالب استفاده می کنیم. این کار در دو مرحله انجام شده.

>>> واردات مجدد

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

به طور مشخص، این کد عملیات کامپایل یک قالب قابل استفاده را انجام می دهد. به عنوان مثال، برای جستجوی فاصله (یک یا چند).

دریافت اطلاعات جداگانه از رشته های مختلف با استفاده از عبارات منظم

فرض کنید یک متغیر حاوی اطلاعات زیر داریم.

>>> text = “””100 INF انفورماتیک

213 MAT ریاضی  

156 ENG انگلیسی»»»

این شامل سه دوره آموزشی است. هر یک از آنها از سه بخش - شماره، کد و نام تشکیل شده است. می بینیم که فاصله بین این کلمات متفاوت است. برای شکستن این خط به اعداد و کلمات جداگانه چه باید کرد؟ برای رسیدن به این هدف دو روش وجود دارد:

  1. یک تابع را فراخوانی کنید دوباره تقسیم.
  2. اعمال تابع انشعاب برای regex.

در اینجا مثالی از استفاده از نحو هر یک از متدها برای متغیر ما آورده شده است.

>>> re.split('s+'، متن)  

# یا

>>> regex.split (متن)

خروجی: ['100'، 'INF'، 'علوم رایانه'، '213'، 'MAT'، 'ریاضی'، '156'، 'ENG'، 'English']

به طور کلی می توان از هر دو روش استفاده کرد. اما در واقع استفاده از یک عبارت منظم به جای چندین بار استفاده از تابع بسیار ساده تر است. دوباره تقسیم.

یافتن موارد منطبق با سه تابع

فرض کنید باید فقط اعداد را از یک رشته استخراج کنیم. برای این کار چه باید کرد؟

re.findall()

در اینجا یک مورد استفاده برای عملکرد وجود دارد findall()، که همراه با عبارات منظم به شما امکان می دهد تا وقوع یک یا چند عدد را از یک متغیر متنی استخراج کنید.

>>> چاپ (متن)  

100 INF انفورماتیک

213 MAT ریاضی  

156 ENG انگلیسی

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

>>> regex_num.findall(متن)  

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

همراه با نماد d، از الگویی استفاده کردیم که مطلقاً هر مقدار عددی واقع در یک متغیر یا متن را نشان می‌دهد. و از آنجایی که یک + را در آنجا اضافه کردیم، به این معنی است که حداقل یک عدد باید وجود داشته باشد. 

همچنین می توانید از علامت * استفاده کنید تا مشخص کنید که وجود یک رقم برای یافتن یک مطابقت لازم نیست.

اما در مورد ما، چون از + استفاده کردیم، با استخراج کردیم findall() 1 یا چند نام دیجیتالی دوره از متن. بنابراین، در مورد ما، عبارات منظم به عنوان تنظیمات برای تابع عمل می کنند.

re.search() در مقابل re.match()

همانطور که می توانید از نام توابع حدس بزنید، اولین جستجو برای مطابقت در متن است. سوال: چه فرقی با هم دارند پیدا کردن؟ نکته این است که یک شی خاص را برمی گرداند که با الگو مطابقت دارد و نه کل دنباله نتایج یافت شده را در قالب یک لیست، مانند تابع قبلی.

به نوبه خود، تابع re.match همین کار را انجام می دهد. فقط نحو متفاوت است. قالب باید در ابتدا قرار گیرد. 

بیایید مثالی بزنیم که این را نشان می دهد.

>>> # یک متغیر با متن ایجاد کنید

>>> text2 = «»» انفورماتیک INF

213 MAT Mathematics 156"»  

>>> # regex را کامپایل کنید و به دنبال الگوها بگردید

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

>>> s = regex_num.search(text2)  

>>> print('First index:', s.start())  

>>> print('آخرین فهرست:'، s.end())  

>>> print(text2[s.start():s.end()]) 

شاخص اول: 17 

آخرین شاخص: 20

213

اگر می خواهید نتیجه مشابهی را به روشی متفاوت بدست آورید، می توانید از تابع استفاده کنید گروه().

جایگزینی بخشی از متن با کتابخانه Re

برای جایگزینی متن، از تابع استفاده کنید re.sub(). فرض کنید لیست دوره های ما کمی تغییر کرده است. می بینیم که بعد از هر مقدار دیجیتال یک تب داریم. وظیفه ما این است که همه این دنباله را در یک خط ترکیب کنیم. برای این کار باید عبارت s+ را جایگزین کنیم به تصویب 

متن اصلی این بود:

# یک متغیر با متن ایجاد کنید

>>> text = “””100 INF t انفورماتیک

213 MAT t ریاضی  

156 ENG t انگلیسی»»»  

>>> چاپ (متن)  

100 اطلاعات اطلاع رسانی

213 MAT ریاضیات  

156 ENG انگلیسی

برای انجام عملیات مورد نظر از خطوط کد زیر استفاده کردیم.

# یک یا چند فاصله را با 1 جایگزین کنید

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

>>> print(regex.sub(' ', text))  

در نتیجه یک خط داریم. 

101 COM Computers 205 MAT Mathematics 189 ENG English

حالا یک مشکل دیگر را در نظر بگیرید. ما با تکلیف فضاسازی مواجه نیستیم. برای ما بسیار مهمتر است که نام دوره ها از یک خط جدید شروع شود. برای این کار از عبارت دیگری استفاده می شود که یک خط جدید به استثنا اضافه می کند. این چه نوع بیانی است؟

کتابخانه Re قابلیتی مانند تطابق منفی را پشتیبانی می کند. تفاوت آن با مستقیم این است که قبل از اسلش یک علامت تعجب دارد. یعنی اگر باید از کاراکتر خط جدید بگذریم، به جای n باید !n بنویسیم.

کد زیر را دریافت می کنیم.

# حذف تمام فاصله ها به جز خط جدید  

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

>>> print(regex.sub(' ', text))  

100 INF انفورماتیک

213 MAT ریاضی  

156 ENG انگلیسی

گروه های بیان منظم چیست؟

با کمک گروه هایی از عبارات منظم می توانیم اشیاء مورد نظر را در قالب عناصر جداگانه و نه در یک خط بدست آوریم. 

فرض کنید باید شماره، کد و نام دوره را نه در یک خط، بلکه به عنوان عناصر جداگانه دریافت کنیم. برای تکمیل کار، باید تعداد زیادی خط کد غیر ضروری بنویسید. 

در واقع می توان کار را تا حد زیادی ساده کرد. می‌توانید الگو را برای همه ورودی‌ها کامپایل کنید و فقط داده‌هایی را که باید از براکت‌ها دریافت کنید، مشخص کنید.

تعداد بسیار کمی از خطوط وجود خواهد داشت. 

# گروه هایی از قالب های متن دوره ایجاد کنید و آنها را استخراج کنید

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

>>> re.findall (الگوی_دوره، متن)  

[('100'، 'INF'، 'علوم رایانه')، ('213'، 'MAT'، 'ریاضی')، ('156'، 'ENG'، 'English')]

مفهوم تطبیق "طمع"

طبق استاندارد، عبارات منظم برای استخراج حداکثر مقدار داده های مطابق برنامه ریزی شده اند. و حتی اگر خیلی کمتر نیاز دارید.

بیایید به یک نمونه کد HTML نگاه کنیم که در آن باید برچسب را دریافت کنیم.

>>> text = "نمونه ای از تطبیق عبارات منظم حریصانه"  

>>> re.findall(''، متن)  

['نمونه ای از تطبیق عبارات منظم حریصانه']

پایتون به جای استخراج تنها یک تگ، تمام رشته را دریافت کرد. به همین دلیل به آن طمع گفته می شود.

و برای دریافت فقط برچسب چه باید کرد؟ در این مورد، باید از تطبیق تنبلی استفاده کنید. برای تعیین چنین عبارتی یک علامت سوال به انتهای الگو اضافه می شود.

کد زیر و خروجی مفسر را دریافت خواهید کرد.

>>> re.findall(''، متن)  

[”,”]

اگر لازم باشد فقط اولین رخدادی که با آن مواجه شده است به دست آید، از روش استفاده می شود جستجو کردن ().

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

"

سپس فقط تگ افتتاحیه پیدا خواهد شد.

الگوهای عبارت محبوب

در اینجا جدولی حاوی متداول ترین الگوهای عبارت منظم است.

مستندات ماژول Re برای پایتون 3 در. ماژول Re برای عبارات منظم

نتیجه

ما فقط ابتدایی ترین روش ها را برای کار با عبارات منظم در نظر گرفته ایم. در هر صورت دیده اید که چقدر اهمیت دارند. و در اینجا فرقی نمی کند که آیا لازم است کل متن یا تکه های آن تجزیه و تحلیل شود، آیا لازم است یک پست در یک شبکه اجتماعی تجزیه و تحلیل شود یا برای پردازش بعداً داده جمع آوری شود. عبارات منظم در این مورد کمک کننده قابل اعتمادی هستند.

آنها به شما اجازه می دهند کارهایی مانند:

  1. تعیین فرمت داده ها، مانند آدرس ایمیل یا شماره تلفن.
  2. گرفتن یک رشته و تقسیم آن به چند رشته کوچکتر.
  3. عملیات مختلفی را با متن انجام دهید، مانند جستجو، استخراج اطلاعات لازم یا جایگزینی بخشی از کاراکترها.

عبارات منظم همچنین به شما این امکان را می دهد که عملیات غیر ضروری را انجام دهید. در نگاه اول تسلط بر این علم کار آسانی نیست. اما در عمل، همه چیز استاندارد شده است، بنابراین کافی است یک بار آن را بفهمید، پس از آن این ابزار نه تنها در پایتون، بلکه در هر زبان برنامه نویسی دیگری قابل استفاده است. حتی اکسل از عبارات منظم برای خودکارسازی پردازش داده ها استفاده می کند. پس استفاده نکردن از این ابزار گناه است.

پاسخ دهید