عبارات با قاعده در پایتون
در این بخش به بررسی عبارات با قاعده در پایتون می پردازیم، در پایتون برای استفاده از عبارات با قاعده (RegEx) ابتدا باید ماژول re
را وارد کنید. سپس میتوانید از توابع مختلف آن برای انجام عملیات مورد نیاز استفاده کنید.
فهرست مطالب:
- ماژول RegEx در پایتون
- توابع RegEx در پایتون
- متا کاراکتر ها (Metacharacters)
- دنباله های ویژه (Special Sequences)
- مجموعه ها (Sets)
- تابع findall()
- تابع search()
- تابع split()
- تابع sub()
- شیء تطابق (Match Object)
ماژول RegEx در پایتون
پایتون یک بسته داخلی به نام re
دارد که میتوان از آن برای کار با عبارات با قاعده استفاده کرد.
نحوه اضافه کردن ماژول re
به این شکل است:
import re
بعد از اینکه ماژول re
را اضافه کردید می توانید از عبارات با قاعده استفاده کنید.
مثال
در این مثال با استفاده از تابع search()
بررسی می کنیم که آیا رشته ما با کلمه The شروع شده و با کلمه Spain ختم می شود:
خروجی:
YES! We have a match!
توضیحات بیشتر
این کد بررسی میکند که آیا یک رشته با کلمه “The” شروع میشود و با “Spain” ختم میشود یا خیر.
خطوط کد به این شکل عمل میکنند:
- ابتدا ماژول
re
را وارد میکنیم. - یک رشته به نام
"txt"
تعریف میکنیم و به آن مقدار"The rain in Spain"
را اختصاص میدهیم. - با استفاده از تابع
re.search
و الگوهای منظم، متن را بررسی میکنیم. در اینجا،"^The.*Spain$"
یک الگوی منظم است که به ما میگوید رشته باید با"The"
شروع شده و با"Spain"
ختم شود. - اگر الگوی منظم با رشته مطابقت داشت، متغیر
x
مقداری غیر صفر دریافت میکند و بلوکif
به اجرا میرسد. در اینجا یک پیام"YES! We have a match!"
چاپ میشود. - در غیر این صورت، بلوک
else
اجرا میشود و پیام"No match"
چاپ میشود.
به طور خلاصه، این کد بررسی میکند که آیا یک رشته خاص با الگوی تعیین شده منظم مطابقت دارد یا خیر و براساس نتیجه پیام مشخص شده را نمایش میدهد.
توابع RegEx در پایتون
ماژول re
مجموعه ای از توابع را در اختیار ما قرار می دهد که می توانیم عملیات های مختلفی را با استفاده از آنها انجام بدهیم.
تابع | توضیحات |
---|---|
findall | برای جستجوی تمام تطابقها (matches) در یک رشته با استفاده از عبارات منظم استفاده میشود. وقتی این تابع فراخوانی میشود، تمام تطابقهای موجود در رشته را پیدا کرده و آنها را در یک لیست برمیگرداند. هر تطابق به عنوان یک عنصر در لیست حاضر خواهد بود. |
search | برای جستجوی نخستین تطابق (match) با الگوی منظم در یک رشته استفاده میشود و اطلاعات مربوط به تطابق را برمیگرداند. |
split | برای تقسیم یک رشته بر اساس الگوی منظم مشخص شده استفاده میشود. وقتی این تابع صدا زده میشود، رشته ورودی را بر اساس الگوی منظم تقسیم میکند و نتایج را در یک لیست برمیگرداند. |
sub | برای جایگزینی تمام تطابقهای یافت شده با الگوی منظم در یک رشته، با یک مقدار دلخواه استفاده میشود. وقتی این تابع صدا زده میشود، تمام تطابقهایی که با الگوی منظم مطابقت دارند در رشته جستجو میشوند و با مقدار دلخواه جایگزین میشوند. |
متا کاراکتر ها (Metacharacters)
متاکاراکترها در عبارات منظم (RegEx) کاراکترهای ویژهای هستند که برای نمایش الگوهای مشخص و عملکرد خاص در جستجو و جایگزینی استفاده میشوند. هر کاراکتر یک معنی خاص می دهد.
کاراکتر | معنی | مثال |
---|---|---|
[] | یک مجموعه از کاراکترها | "[a-m]" |
\ | نشانگر یک دنباله ویژه (همچنین میتواند برای لغو کاراکترهای ویژه استفاده شود) | "\d" |
. | متاکاراکتر نقطه به معنای هر کاراکتر به جز کاراکتر جدید خط (newline) است. | "he..o" |
^ | شروع با | "^hello" |
$ | پایان با | "planet$" |
* | به معنای صفر یا بیشتر تکرار کاراکتر قبلی است. به عبارت دیگر، وقتی * به یک کاراکتر قبلی پیوسته شود، نشان میدهد که کاراکتر قبلی میتواند صفر بار تکرار شود یا بیشتر از یک بار تکرار شود. | "he.*o" |
+ | به معنای یک یا بیشتر تکرار کاراکتر قبلی است. به عبارت دیگر، وقتی + به یک کاراکتر قبلی پیوسته شود، نشان میدهد که کاراکتر قبلی حداقل یک بار تکرار شود و میتواند بیشتر از یک بار تکرار شود. | "he.+o" |
? | به معنای صفر یا یک بار تکرار کاراکتر قبلی است. به عبارت دیگر، وقتی ? به یک کاراکتر قبلی پیوسته شود، نشان میدهد که کاراکتر قبلی میتواند صفر بار تکرار شود یا یک بار تکرار شود. | "he.?o" |
{} | به معنای تعداد دقیق n بار تکرار کاراکتر قبلی است. با استفاده از این متاکاراکتر، میتوانید تعداد دقیق تکرارهای یک کاراکتر را مشخص کنید. | "he.{2}o" |
| | به معنای “یا” است و برای انتخاب بین دو الگو یا گروه از الگوها استفاده میشود. | "falls|stays" |
() | برای ضبط (ذخیره) و گروهبندی استفاده میشود. با استفاده از این متاکاراکتر، میتوانید بخشی از الگو را ضبط کرده و در یک گروه قرار دهید تا در آینده بتوانید به آن مراجعه کنید یا روی آن عملیاتی انجام دهید. |
دنباله های ویژه (Special Sequences)
دنبالههای ویژه (Special Sequences) در عبارات منظم، دنبالههایی هستند که با یک \
آغاز میشوند و یک معنای خاص دارند. در جدول پایین لیستی از دنبالههای ویژه را برای عبارات منظم مشاهده می کنید:
کاراکتر | توضیحات | مثال |
---|---|---|
\A | در صورتی که کاراکترهای مشخص شده در ابتدای رشته وجود داشته باشند، یک تطابق (match) برگردانده میشود. | "\AThe" |
\b | یک تطابق (match) برگردانده میشود که در آن کاراکترهای مشخص شده در ابتدا یا انتهای یک کلمه قرار داشته باشند. (`r` در ابتدای عبارت، مطمئن میشود که رشته به عنوان یک “رشته خام” (raw string) مورد بررسی قرار میگیرد) | r"\bain" r"ain\b" |
\B | یک تطابق (match) برگردانده میشود که در آن کاراکترهای مشخص شده حضور دارند، اما در ابتدا (یا انتها) یک کلمه قرار ندارند. (`r` در ابتدای عبارت، مطمئن میشود که رشته به عنوان یک “رشته خام” (raw string) مورد بررسی قرار میگیرد) | r"\Bain" r"ain\B" |
\d | یک تطابق (match) برگردانده میشود که رشته حاوی اعداد (اعداد از 0 تا 9) باشد. | "\d" |
\D | یک تطابق (match) برگردانده میشود که رشته شامل اعداد نباشد. | "\D" |
\s | یک تطابق (match) برگردانده میشود که رشته شامل یک کاراکتر فضای سفید (white space) باشد. | "\s" |
\S | یک تطابق (match) برگردانده میشود که رشته شامل کاراکتر فضای سفید (white space) نباشد. | "\S" |
\w | یک تطابق (match) برگردانده میشود که رشته شامل هر کاراکتر کلمهای (اعداد و حروف از a تا Z، اعداد از 0 تا 9 و کاراکتر زیرخط _) باشد. | "\w" |
\W | یک تطابق (match) برگردانده میشود که رشته شامل هیچ کاراکتر کلمهای (اعداد و حروف از a تا Z، اعداد از 0 تا 9 و کاراکتر زیرخط _) نباشد. | "\W" |
\Z | در صورتی که کاراکترهای مشخص شده در انتهای رشته وجود داشته باشند، یک تطابق (match) برگردانده میشود. | "Spain\Z" |
مجموعه ها (Sets)
مجموعه (Set) یک مجموعه از کاراکترها درون جفت کروشههای []
است که معنای خاصی دارد:
مجموعه | توضیحات |
---|---|
[arn] | یک تطابق (match) برگردانده میشود که یکی از کاراکترهای مشخص شده (a، r یا n) حاضر باشد. |
[a-n] | یک تطابق (match) برگردانده میشود که هر کاراکتری با حروف کوچک بین a و n (شامل a و n) باشد. |
[^arn] | یک تطابق (match) برگردانده میشود که هر کاراکتری به جز a، r و n باشد. |
[0123] | یک تطابق (match) برگردانده میشود که یکی از اعداد مشخص شده (0، 1، 2 یا 3) حاضر باشد. |
[0-9] | یک تطابق (match) برگردانده میشود که هر عددی بین 0 تا 9 (شامل 0 و 9) باشد. |
[0-5][0-9] | یک تطابق (match) برگردانده میشود که هر عدد دو رقمی بین 00 تا 59 (شامل 00 و 59) باشد. |
[a-zA-Z] | یک تطابق (match) برگردانده میشود که هر کاراکتر حروفی (بزرگ یا کوچک) بین a و z (شامل a و z) باشد. |
[+] | در مجموعهها (+, *, ., |, (), $, {}) معنای خاصی ندارند، بنابراین [+] به این معنا است: یک تطابق (match) را برای هر کاراکتر “+” در رشته برگردانید. |
تابع findall()
تابع findall()
یک لیست شامل تمام تطابقها را برمیگرداند.
مثال
در اینجا لیستی از تمام تطابقها (matches) را چاپ می کنیم:
خروجی:
['ai', 'ai']
توضیحات بیشتر
ابتدا، ما ماژول `re` را وارد میکنیم تا بتوانیم از قابلیتهای قالببندی عبارات با قاعده استفاده کنیم.
سپس یک رشته با نام `txt` تعریف میکنیم که متن “The rain in Spain” را به عنوان مقدار خود دریافت میکند.
سپس با استفاده از تابع `findall()`، الگوی “ai” را در رشته `txt` جستجو میکنیم. این الگو به معنای پیدا کردن تمام رشتههایی است که دنباله “ai” در آنها وجود دارد. نتیجه جستجو در متغیر `x` ذخیره میشود.
در انتها، مقادیر `x` را چاپ میکنیم تا تمام تطابقها در قالب یک لیست نمایش داده شوند. در این مثال، خروجی برابر با `[‘ai’, ‘ai’]` خواهد بود، زیرا الگو “ai” در دو جایگاه مختلف در رشته `txt` یافت میشود.
همچنین اگر هیچ تطابقی را پیدا نکند خروجی یک لیست خالی خواهد بود:
خروجی:
[]
No match
تابع search()
تابع search()
برای جستجوی اولین تطابق با الگو در یک رشته استفاده میشود. این تابع از ابتدای رشته شروع کرده و تا زمانی که یافتن تطابق (match) اولین بار رخ دهد، رشته را پیمایش میکند. اگر تطابقی یافت شود، یک شیء تطابق (match object) برگردانده میشود، در غیر این صورت مقدار None برگردانده میشود. تابع search()
تنها اولین تطبیق (match) را بررسی میکند و به دنبال تطابقهای بعدی نمیگردد.
مثال
جستجوی اولین کاراکتر فاصله سفید (white-space) در رشته:
خروجی:
The first white-space character is located in position: 3
مثال
در اینجا یک جستجویی انجام می دهیم که هیچ تطابقی (match) را برنمی گرداند:
خروجی:
None
تابع split()
تابع split()
رشته را بر اساس الگوی مشخص شده جدا میکند و یک لیست از رشتههای جداشده را برمیگرداند. این تابع بر اساس الگوی مشخص شده، رشته را به بخشهای کوچکتر تقسیم میکند و هر بخش را به عنوان یک عنصر جداگانه در لیست قرار میدهد.
با استفاده از تابع split()
میتوانیم رشته را بر اساس فاصلهها، کاراکترهای خاص، عبارات با قاعده و غیره جدا کنیم و از بخشهای جداشده در زمینههای مختلف استفاده کنیم.
مثال
در این مثال یک رشته با توجه به فاصله (white-space) تجزیه می کنیم:
خروجی:
['The', 'rain', 'in', 'Spain']
همچنین شما میتوانید تعداد عناصر تجزیه شده را با مشخص کردن پارامتر maxsplit کنترل کنید.
مثال
در اینجا رشته مشخص شده را فقط برای یک بار تکرار، تجزیه می کنیم:
خروجی:
['The', 'rain in Spain']
تابع sub()
تابع sub()
، تطابقهای یافت شده را با متن دلخواه شما جایگزین میکند. به عبارت دیگر، این تابع میتواند رشتههایی که با الگوی مشخص شده تطابق دارند را پیدا کرده و با یک متن جدید جایگزین کند.
با استفاده از تابع sub()
میتوانید تغییرات و جایگزینیهای مورد نیاز را در رشتهها انجام داده و نتیجه نهایی را بدست آورید.
مثال
در این مثال هر کاراکتر فاصله سفید (white-space) را با عدد 9 جایگزین می کنیم:
خروجی:
The9rain9in9Spain
همچنین پارامتر count در تابع sub()
مشخص میکند که حداکثر چند بار تطابق جایگزینی انجام شود.
با مقدار دهی این پارامتر به یک عدد مثبت، فقط تعداد مشخص شده از تطابقها جایگزین میشوند. اگر مقدار پارامتر count برابر با صفر باشد یا مقدار منفی داشته باشد، تمام تطابقها جایگزین میشوند. به عبارت دیگر، count=1 به معنای جایگزینی تنها یک بار تطابق است و count=0 یا مقدار منفی به معنای جایگزینی تمام تطابقها است.
مثال
در این مثال تنها یک بار عدد ۹ با فاصله (white-space) جایگزین خواهد شد:
خروجی:
The9rain in Spain
شیء تطابق (Match Object)
شیء تطابق (Match Object) در عبارات با قاعده، نتیجهای است که برگردانده میشود و شامل اطلاعات درباره یک تطابق خاص است.
این شیء شامل اطلاعاتی مانند متن تطابق یافته، محدوده موقعیت تطابق در رشته اصلی، گروههای تطابق و سایر ویژگیها است. با استفاده از شیء تطابق، میتوانید به صورت دقیق اطلاعات درباره تطابقهای یافت شده در رشته دسترسی پیدا کنید و از آنها استفاده کنید.
مثال
در این مثال جستجویی انجام می دهیم که خروجی یک شیء تطابق (Match Object) خواهد بود:
خروجی:
<_sre.SRE_Match object; span=(5, 7), match='ai'>
شیء تطابق (Match Object) دارای خصوصیات و متدهایی است که برای دریافت اطلاعات درباره جستجو و نتیجه استفاده میشوند:
- تابع
.span()
یک تاپل را برمیگرداند که شامل موقعیت شروع و پایان تطابق است. - تابع
.string
رشتهای را که به تابع ورودی داده شده است برمیگرداند. - تابع
.group()
بخشی از رشته را که تطابق داشته است برمیگرداند.
مثال
در این مثال عبارت با قاعده ای تعریف کرده ایم که دنبال اولین رشته ای می گردد که با حرف S شروع شده باشد و در نهایت موقعیت شروع آن رشته و پایان آن را برمی گرداند:
خروجی:
(12, 17)
مثال
در اینجا عبارت با قاعده ما همانند مثال قبلی دنبال رشته ای می گردد که با S شروع شده باشد و در نهایت با متد .group()
آن رشته را چاپ می کنیم:
خروجی:
Spain
مثال
در اینجا رشته ای که به عنوان ورودی به تابع داده شده است را چاپ می کنیم:
خروجی:
The rain in Spain
توجه: اگر هیچ تطابقی وجود نداشته باشد، به جای Match Object، مقدار None
برگردانده می شود.
آیا این مطلب برای شما مفید بود ؟