RegEx در پایتون – به زبان ساده

مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید
RegEx در پایتون
یک عبارت با قاعده (Regular Expression | RegEx) یک توالی از کاراکترها است که الگوی جستجو را مشخص میکند. مثال زیر در این راستا قابل توجه است.
^a...s$
کد بالا، الگوی RegEx را تعریف میکند. الگو در واقع «هر رشته پنج کلمهای که با a آغاز و با s پایان یابد» است. یک الگوی تعریف شده با استفاده از RegEx را میتوان برای تطبیق رشته استفاده کرد.

در اینجا از تابع ()re.match برای جستجوی pattern درون test_string استفاده میشود. این متد، یک شی مطابق را در صورت موفقیت جستجو، باز میگرداند. در غیر این صورت، None را باز میگرداند. چندین تابع دیگر نیز وجود دارند که در ماژول re برای کار با RegEx تعریف شدهاند. پیش از بررسی ماژول ، مبحث عبارات با قاعده مورد بررسی قرار میگیرد.
تعریف الگو با استفاده از RegEx
برای تعریف عبارت با قاعده، متاکاراکترها (metacharacters) مورد استفاده قرار میگیرند. در مثال بالا، ^ و $ متاکاراکترها هستند. در ادامه مطلب RegEx در پایتون متاکاراکترها معرفی شدهاند.
متاکاراکترها
متاکاراکترها، در واقع کاراکترهایی هستند که به شیوه خاصی با استفاده از موتور RegEx تفسیر میشوند.
در ادامه، لیستی از متاکاراکترها آورده شده است.
[] . ^ $ * + ? {} () \ |
[] - آکولاد
آکولاد، مجموعه کاراکترهایی را تعیین میکند که فرد قصد تطبیق آنها را دارد.

در اینجا، در صورتی [abc] تطبیق پیدا میکند که رشتهای که کاربر تایپ میکند حاوی هر یک از کاراکتر b ،a و یا c باشد. همچنین، میتوان طیفی از کاراکترها را با استفاده از - درون آکولاد تعیین کرد.
- [a-e] مشابه [abcde] است.
- [1-4] مشابه [1234] است.
- [0-39] مشابه [01239] است.
میتوان یک مجموعه کاراکتر را با استفاده از علامت ^ در آغاز آکولاد، متمم (معکوس) کرد.
- [abc^]: به معنای هر کاراکتری است به جز b ،a و c.
- [0-9^]: به معنای هر کاراکتر غیر عددی است.
. دوره زمانی
یک دوره زمانی هر کاراکتر جدایی را تطبیق میدهد (به جز خط جدید 'n\').

^ - کلاه
علامت ^ برای بررسی اینکه آیا یک رشته با کاراکتر خاصی شروع میشود یا نه مورد استفاده قرار میگیرد.

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

* ستاره
علامت ستاره * صفر یا بیشتر، تعداد وقوع رشتهای که به آن داده شده را محاسبه میکند.

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

? علامت سوال
علامت سوال ؟ صفر یا تعداد بیشتری وقوع الگوی داده شده به آن را محاسبه میکند.

{} براکت
کد مقابل مفروض است: {n,m}. این کد یعنی حداقل n و حداکثر m تکرار از الگو به آن سپرده شده است.

در ادامه، مثال دیگری ارائه شده است. RegEx برای {2, 4}[۹-۰] حداقل با ۲ رقم تطبیق پیدا میکند، ولی با بیش از ۴ رقم تطبیق پیدا نمیکند.

| خط عمودی
خط عمودی | برای تناوب (یا عملگر or) مورد استفاده قرار میگیرد.

در اینجا، a|b با هر رشتهای که حاوی a یا b است، تطبیق پیدا میکند.
() گروه
جفت پرانتز () برای گروه کردن زیر الگوها مورد استفاده قرار میگیرد. برای مثال، a|b|c)xz)، با هر رشتهای که با a یا b یا c که در دنباله آن xy آمده باشد، مطابقت پیدا میکند.

\ بکاسلش
بکاسلش، برای پرش از کاراکترهای مختلف شامل همه متاکاراکترها مورد استفاده قرار میگیرد. برای مثال، a$\ در صورتی تطبیق پیدا میکند که $ با a دنبال شود. در اینجا، $ توسط موتور RegEx به شیوه خاصی تفسیر نمیشود.
اگر کاربر اطمینان ندارد که یک کاراکتر دارای معنای خاصی است، میتواند \ را پیش از آن قرار دهد. این کار موجب میشود تا کاربر اطمینان حاصل کند که کاراکتر به شیوه خاصی تفسیر نمیشود. توالیهای خاص، نوشتن الگوهای متداول استفاده شده را آسانتر میکنند. در ادامه، فهرستی از توالیهای خاص آورده شده است.
A\ در صورتی تطبیق پیدا میکند که یک کاراکتر تعیین شده در آغاز رشته وجود داشته باشد.

b\ در صورتی تطبیق پیدا میکند که کاراکترهای تعیین شده در آغاز یا پایان یک کلمه باشند.

B\ برعکس b\ است. B\ در صورتی تطبیق پیدا میکند که کاراکترهای تعیین شده در آغاز یا پایان یک کلمه نباشند.

d\ با هر عدد اعشاری تطبیق پیدا میکند و در واقع، مساوی با [۹-۰] است.

D\ با هر رقم غیر اعشاری تطبیق پیدا میکند و در واقع، برابر با [۹-۰^] است.

s\ جایی تطبیق پیدا میکند که رشته حاوی کاراکتر «وایتاسپیس» (whitespace) ب اشد و در واقع، برابر با [t\n\r\f\v\] است.

S\ وقتی تطبیق پیدا میکند که یک رشته حاوی هرگونه کاراکتر غیر وایتاسپیس (non-whitespace) باشد و در واقع، برابر با [t\n\r\f\v\^] است.

w\ با هر کاراکتر «حرفیعددی» (Alphanumeric) (ارقام و حروف الفبا) تطبیق پیدا میکند. برابر با [_a-zA-Z0-9] است. شایان توجه است که زیرخط _ هم یک کاراکتر حرفیعددی محسوب میشود.

W\ با هر کاراکتر غیر حرفیعددی تطبیق پیدا میکند و در واقع، برابر با [_a-zA-Z0-9^] است.

Z\ در صورتی تطبیق پیدا میکند که کاراکتر تعیین شده در پایان یک رشته باشد.

نکته: برای ساخت و تست عبارات با قاعده، میتوان از ابزارهای تست RegEx، مانند regex101 استفاده کرد. این ابزارها نه تنها به کاربر در ساخت عبارات با قاعده کمک میکنند، بلکه به یادگیری آن نیز کمک میکنند. اکنون که مبانی RegEx مورد بررسی قرار گرفت، روش استفاده از RegEx در کد پایتون بررسی میشود.
ماژول مربوط به RegEx در پایتون
پایتون دارای یک ماژول با نام re برای کار با عبارات با قاعده است.
برای استفاده از این ماژول، نیاز به «وارد کردن» (import) ماژول re است.
import re
ماژول، چندین تابع و ثابت را برای کار با RegEx تعریف میکند.
()re.findall
متد ()re.findall لیستی از رشتهها را که حاوی همه تطبیق پیدا میکند، باز میگرداند.
مثال ۱: ()re.findall
در صورتی که الگو یافته نشود، ()re.findall یک لیست خالی باز میگرداند.
()re.split
متد re.split، رشتهای را که در آن تطبیق پیدا شده است، تقسیم میکند و لیستی از رشتهها را باز میگرداند که در آن تقسیمبندی اتفاق میافتد.
مثال 2: ()re.split
import re string = 'Twelve:12 Eighty nine:89.' pattern = '\d+' result = re.split(pattern, string) print(result) # Output: ['Twelve:', ' Eighty nine:', '.']
اگر الگو یافت نشد، ()re.split یک لیست حاوی رشته خالی را باز میگرداند. میتوان آرگومان maxsplit را به متد ()re.split پاس داد. این حداکثر عددی از تقسیمها هست که میتواند به وقوع بپیوندد.
import re string = 'Twelve:12 Eighty nine:89 Nine:9.' pattern = '\d+' # maxsplit = 1 # split only at the first occurrence result = re.split(pattern, string, 1) print(result) # Output: ['Twelve:', ' Eighty nine:89 Nine:9.']
مقدار پیشفرض maxsplit برابر با صفر است؛ به معنای همه بخشبندیهای ممکن.
()re.sub
نحو ()re.sub به صورت زیر است:
مثال ۳: ()re.sub
اگر الگو پیدا نشد، ()re.sub رشته اصلی را باز میگرداند.
میتوان count را به عنوان چهارمین پارامتر به متد ()re.sub پاس داد. در صورت حذف این متغیر، نتیجه صفر میشود. این موجب میشود همه وقوعها جایگزین شوند.
()re.subn
()re.subn مشابه با ()re.sub است، با این تفاوت که یک تاپل با دو آیتم که حاوی رشته جدید و تعداد جایگزینیهای انجام شده است را باز میگرداند.
مثال ۴: ()re.subn
()re.search
()re.search متد دو آرگومان را دریافت میکند: یک الگو و یک رشته. متد به دنبال اولین محلی میگردد که الگوی RegEx، اولین رشته مطابق را تولید میکند. اگر جستجو موفقیتآمیز بود، ()re.search یک رشته مطابق را پیدا میکند. در غیر این صورت، None را باز میگرداند.
مثال ۵: ()re.search
در اینجا، match حاوی شی تطبیق است.
شی تطبیق
میتوان متدها و خصیصههای یک «شی تطبیق» (Match object) را با استفاده از تابع ()dir دریافت کرد. برخی از متدهای متداول استفاده شده و شیهای تطبیق عبارتند از:
()match.group
متد ()group بخشی از رشته که تطبیق پیدا میکند را باز میگرداند.
مثال ۶: شی تطبیق
در اینجا، متغیر match، حاوی یک شی تطبیق داده شده است. الگوی (\d{3}) (\d{2}) دارای دو زیر گروه (\d{3}) و (\d{2}) است. میتوان بخشی از رشته این زیرگروه پرانتز گذاری شده را دریافت کرد. در زیر، روش انجام این کار نمایش داده شده است:
()match.start(), match.end() and match.span
تابع ()start اندیس شروع زیررشته تطبیق یافته را باز میگرداند. به طور مشابه، ()end اندیس پایانی رشته تطبیق یافته را باز میگرداند.
تابع ()span، یک تاپل حاوی اندیس ابتدایی و پایانی از محل تطبیق داده شده را باز میگرداند.
match.re و match.string
خصیصه re از شی تطبیق یافته یک شی عبارت با قاعده را باز میگرداند. به طور مشابه، خصیصه string رشته پاس داده شده را باز میگرداند.
در بالا، همه متدهای محبوبی که در ماژول re موجود هستند، معرفی شدهاند.
استفاده از پیشوند r پیش از Regex
هنگامی که پیشوند r یا R پیش از یک عبارت با قاعده مورد استفاده قرار میگیرد، به معنای رشته خام است.
برای مثال، 'n\' یک خط جدید است که r'\n' در آن به معنی دو کاراکتر است: یک بکاسلش \ که به دنبال آن n وجود دارد. بکاسلش \ برای گذر دادن کاراکترهای گوناگون شامل همه «متاکاراکترها» (Metacharacters) مورد استفاده قرار میگیرد. اگرچه پیشوند r موجب میشود \ مانند یک کاراکتر نرمال برخورد کند.
مثال ۷: رشته خام با استفاده از پیشوند r
معرفی فیلم آموزش پایتون فرادرس
برای فراگیری پایتون استفاده از فیلمهای آموزشی به زبان فارسی فرادرس پیشنهاد میشوند که در ادامه مطلب RegEx در پایتون معرفی شدهاند.
معرفی فیلم آموزش پایتون مقدماتی
- برای دیدن فیلم آموزش پایتون مقدماتی + اینجا کلیک کنید.
معرفی فیلم آموزش کار با کتابخانه های NumPy و Matplotlib در پایتون
- برای دیدن فیلم آموزش پایتون تکمیلی + اینجا کلیک کنید.
معرفی فیلم آموزش پایتون با مثالهای عملی
- برای دیدن فیلم آموزش پایتون فرادرس با مثالهای عملی + اینجا کلیک کنید.
معرفی فیلم آموزش پایتون با برنامهنویسی شیگرا
- برای دیدن فیلم آموزش پایتون با برنامهنویسی شیگرا + اینجا کلیک کنید.
معرفی فیلم آموزش پایتون برنامه نویسی متا

طول مدت این دوره آموزشی دو ساعت و نه دقیقه و مدرس آن مهندس پژمان اقبالی است. در این دوره آموزشی که در این بخش از مطلب RegEx در پایتون معرفی شده، مفهوم برنامهنویسی متا (متا پروگرامینگ) بیان شده و چگونگی برنامه نویسی متا در پایتون تشریح شده است.
- برای دیدن فیلم آموزش پایتون برنامهنویسی متا + اینجا کلیک کنید.
معرفی فیلم آموزش پایتون الگوهای طراحی

مدت زمان فیلم آموزش پایتون الگوهای طراحی دوازده ساعت و بیست و شش دقیقه و مدرس آن، مهندس پژمان اقبالی شمسآبادی است. این دوره آموزشی که در این بخش از مطلب RegEx در پایتون معرفی شده، برای کسانی که با زبان پایتون آشنایی دارند و در صدد آن هستند که مهارتهای خود را در این زبان افزایش بدهند و به نیروی برنامهنویسی متخصصتری مبدل شوند، مناسب است. الگوی طراحی برای حل مسائل پیرامون طراحی نرمافزارها مورد استفاده قرار میگیرند.
از جمله سرفصلهای مورد بررسی در این دوره آموزشی که که در این بخش از مطلب چرا پایتون یاد بگیریم معرفی شده میتوان به مفهوم الگوهای طراحی، الگوی طراحی یگانه (Singleton Design Pattern)، الگوی طراحی کارخانه (Factory Design Pattern)، الگوی طراحی پروکسی (Proxy Design Pattern)، الگوی طراحی مشاهده کنننده (Observer Design Pattern)، الگوی طراحی فرمان (Command Design Pattern)، الگوی طراحی روش قالب (Template Method Design Pattern)، الگوی طراحی مدل-نمایش-کنترلر (Model-View-Controller Design Pattern) و الگوی طراحی وضعیت (State Design Pattern) اشاره کرد.
- برای دیدن فیلم آموزش پایتون الگوهای طراحی + اینجا کلیک کنید.
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید



















ممنون درحد استفاده در جنگو استفاده کردم