سطح مقدماتی (Beginner Level)
عبارات باقاعده یا Regular Expressions (که به اختصار RegEx نامیده میشوند)، ابزاری بسیار قدرتمند برای جستجو، استخراج و جایگزینی الگوهای متنی هستند. در پایتون، ما برای کار با این عبارات از ماژول داخلی re استفاده میکنیم.
یادگیری RegEx برای کارهایی مانند اعتبارسنجی ایمیل، تحلیل فایلهای لاگ (Log) و تمیزکاری دادهها (Data Cleaning) ضروری است.
۱. شروع کار با ماژول re
برای استفاده از این قابلیت، ابتدا باید ماژول آن را وارد کنید. مهمترین توابع مقدماتی عبارتند از:
re.search(): جستجو در کل متن برای یافتن اولین تطابق.re.match(): جستجو فقط در ابتدای رشته.re.findall(): پیدا کردن تمام موارد تطابق یافته و بازگرداندن آنها به صورت لیست.
۲. متاکاراکترها (Metacharacters)
قدرت اصلی RegEx در استفاده از کاراکترهای خاص است که معنای ویژهای دارند:
.: هر کاراکتری (به جز خط جدید).^: شروع رشته.$: پایان رشته.*: تکرار صفر یا بیشتر.+: تکرار یک یا بیشتر.?: تکرار صفر یا یک بار.
# مثال ۲: درک پترنها (Static)
# پترن: ^H...o$
# معنی: با H شروع شود، سه کاراکتر دلخواه وسط باشد، و با o تمام شود.
pattern = r"^H...o$"
۳. کلاسهای کاراکتر (Character Classes)
برای مشخص کردن نوع خاصی از کاراکترها (مثل اعداد یا حروف) از این کلاسها استفاده میکنیم:
\d: تمام اعداد (0-9).\w: تمام حروف و اعداد (Word characters).\s: فضای خالی (Space, Tab, Newline).
سطح پیشرفته (Professional Level)
در سطح حرفهای، بحث بر روی بهینهسازی (Performance)، گروهبندی (Grouping) و فلگهای کامپایل (Compilation Flags) متمرکز است. استفاده صحیح از این موارد میتواند سرعت پردازش متنهای سنگین را به شدت افزایش دهد.
۱. گروهبندی (Grouping) و استخراج دقیق
با استفاده از پرانتز () میتوانیم بخشهای خاصی از الگو را جداگانه استخراج کنیم. این کار برای پارس کردن فرمتهایی مثل تاریخ یا ایمیل حیاتی است.
۲. کامپایل کردن الگوها (Pre-compilation)
اگر قرار است از یک الگو هزاران بار استفاده کنید (مثلاً در یک حلقه)، بهتر است آن را با re.compile() یکبار کامپایل کنید. این کار سربار (Overhead) تفسیر الگو را کاهش میدهد و پرفورمنس را بالا میبرد.
# مثال ۶: ساختار کامپایل شده (Static)
import re
# این الگو یک بار تفسیر میشود و آبجکت آن ذخیره میگردد
email_pattern = re.compile(r"[\w\.-]+@[\w\.-]+")
# حالا میتوان از این آبجکت بارها استفاده کرد
# match1 = email_pattern.search(text1)
# match2 = email_pattern.search(text2)
۳. جایگزینی پیشرفته با re.sub
تابع sub معادل پیشرفته replace در استرینگهاست، با این تفاوت که میتوانید بر اساس الگو جایگزینی را انجام دهید.
۴. فلگهای کنترلی (Flags)
فلگها رفتار جستجو را تغییر میدهند. مهمترین آنها:
re.IGNORECASEیاre.I: نادیده گرفتن بزرگی و کوچکی حروف.re.MULTILINEیاre.M: باعث میشود^و$برای هر خط جداگانه عمل کنند (نه کل رشته).re.DOTALLیاre.S: باعث میشود نقطه.شامل خط جدید (\n) هم بشود.
۵. نگاه به جلو و عقب (Lookaheads & Lookbehinds)
این مبحث بسیار پیشرفته برای زمانی است که میخواهید الگویی را پیدا کنید اما نمیخواهید آن بخش خاص در نتیجه نهایی (match) بیاید.
(?=...): Positive Lookahead (به شرطی که بعدش این باشد).(?<=...): Positive Lookbehind (به شرطی که قبلش این بوده باشد).