ویژگی تصویر

آموزش RegEX در Python

  /  پایتون   /  عبارات با قاعده در پایتون
بنر تبلیغاتی الف

در این بخش به بررسی عبارات با قاعده در پایتون می پردازیم،‌ در پایتون برای استفاده از عبارات با قاعده (RegEx) ابتدا باید ماژول re  را وارد کنید. سپس می‌توانید از توابع مختلف آن برای انجام عملیات مورد نیاز استفاده کنید.

فهرست مطالب:

ماژول RegEx در پایتون

پایتون یک بسته داخلی به نام re دارد که می‌توان از آن برای کار با عبارات با قاعده استفاده کرد.

نحوه اضافه کردن ماژول re به این شکل است:

import re

بعد از اینکه ماژول re را اضافه کردید می توانید از عبارات با قاعده استفاده کنید.

مثال

در این مثال با استفاده از تابع search() بررسی می کنیم که آیا رشته ما با کلمه The شروع شده و با کلمه Spain ختم می شود:

تماشا در حالت تمام صفحه

خروجی:

YES! We have a match!
توضیحات بیشتر

این کد بررسی می‌کند که آیا یک رشته با کلمه “The” شروع می‌شود و با “Spain” ختم می‌شود یا خیر.

خطوط کد به این شکل عمل می‌کنند:

  1. ابتدا ماژول re را وارد می‌کنیم.
  2. یک رشته به نام "txt" تعریف می‌کنیم و به آن مقدار "The rain in Spain" را اختصاص می‌دهیم.
  3. با استفاده از تابع re.search و الگوهای منظم، متن را بررسی می‌کنیم. در اینجا، "^The.*Spain$" یک الگوی منظم است که به ما می‌گوید رشته باید با "The" شروع شده و با "Spain" ختم شود.
  4. اگر الگوی منظم با رشته مطابقت داشت، متغیر x مقداری غیر صفر دریافت می‌کند و بلوک if به اجرا می‌رسد. در اینجا یک پیام "YES! We have a match!" چاپ می‌شود.
  5. در غیر این صورت، بلوک 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 برگردانده می شود.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج