آموزش عبارات منظم و با قاعده ریجکس در پایتون (Python RegEx)

آموزش عبارات منظم و با قاعده ریجکس در پایتون (Python RegEx)

RegEx مخفف عبارت (Regular Expression) یا ریجکس در پایتون، که توالی از کاراکترها برای مشخص کردن الگوی جست جو است.

از RegEx برای بررسی اینکه آیا یک رشته الگوی جست جوی مشخص شده را بررسی می کند، می توان استفاده کرد.

زمان مطالعه: 3 دقیقه
بازدید: 2800
پرسش و پاسخ: 0

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

پایتون یک Package داخلی با نام re دارد که می توانیم از آن برای کار با Regular Experssion ها استفاده کرد.

طریقه وارد کردن این ماژول در زیر نشان داده شده است.

import re

RegEx در پایتون

هنگامی که ماژول re را به برنامه خودتون وارد کردید، می توانید از عبارات با قاعده (منظم یا ریجکس) استفاده کنید.

مثال: در این مثال رشته را بررسی می کند که آیا رشته با The شروع می شود و با Spain به پایان می رسد.

import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

RegEx یا ریجکس در پایتون (Python)

توابع RegEx

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

توابع RegEx در پایتون (Python)
تابع توضیحات
Findall لیستی را که شامل همه موارد منطبق است، برمیگرداند
Search اگر در هر جایی از رشته مطابقت وجود داشته باشد، یک match object را که در ادامه مقاله در مورد آن توضیح می دهیم برمیگرداند
Split لیستی را که رشته در هر تطابق تقسیم شده است، برمیگرداند
Sub یک یا چند مورد منطبق را با یک رشته جایگزین می کند

در ادامه این مقاله به هر کدام از این توابع به طور اختصاصی با ذکر مثال خواهیم پرداخت.

Metacharacters

Metacharacters، کاراکترهایی خاص با معانی خاص هستند که در جدول زیر آن ها را برای شما توضیح داده ایم.

Metacharacters در پایتون (Python)
کاراکتر توضیحات مثال
[] یک مجموعه از کاراکترها  برای تطابق “[a-m]”
\ توالی خاصی را نشان می دهد (همچنین می تواند برای پرش از کاراکترهای خاص استفاده شود)، در ادامه جدولی از توالی های خاص را برای شما آورده ایم “\d”
. هر مقداری که تعدادش کاراکترهای آن (هر کاراکتری به جز کاراکتر newline)  با تعداد (.) ها مطابقت داشته باشد “he..o”
^ بررسی شروع رشته با مقدار مشخص “hello^”
$ بررسی خاتمه رشته با مقدار مشخص “world$”
* وجود صفر تطابق یا بیشتر برای رشته مشخص شده “aix*”
+ وجود یک تطابق یا بیشتر برای رشته مشخص شده “aix+”
{} مشخص کردن وجود حداکثر و حداقل الگوی مشخص شده “al{2}”
| یا، یعنی از هر کدام بود تطابق را اعلام کن “falls|stays”
() برای گروه کردن زیر الگوها  

توالی های خاص

یک توالی خاص یک backslash (\) با یک کاراکتر به دنبال آن است که معنی خاصی دارد که در جدول زیر هر کدام از آن ها را بررسی کرده ایم.

توالی های خاص در پایتون (Python)
کاراکتر توضیحات مثال
A\ اگر نویسه های مشخص شده در ابتدای رشته باشند، تطبیق پیدا می کند “AThe\”
b\

اگر کاراکترهای مشخص شده در ابتدا یا در انتهای کلمه باشند، تطابق پیدا می کند

(r در ابتدای کاراکترها اطمینان حاصل می کند که با این رشته به عنوان "رشته خام" رفتار می شود)

”r”\bain

”r”ain\b

B\

زمانی مطابقت پیدا می کند که کاراکترهای مشخص شده در کلمه وجود داشته باشند اما نه در ابتدا یا انتهای آن

(r در ابتدای کاراکترها اطمینان حاصل می کند که با این رشته به عنوان "رشته خام" رفتار می شود)

”r”\Bain

”r”ain\B

d\ زمانی مطابقت پیدا می کند که رشته حاوی ارقام باشد (از 0 تا 9). “d\”
D\ زمانی مطابقت پیدا می کند که رشته حاوی ارقام نباشد “D\”
s\ زمانی مطابقت پیدا می کند که رشته مورد نظر حاوی کاراکتر space (فضای خالی) باشد “s\”
S\ زمانی مطابقت پیدا می کند که رشته مورد نظر حاوی کاراکتر space (فضای خالی) نباشد “S\”
w\

زمانی مطابقت پیدا می کند که رشته مورد نظر حاوی کاراکترهای "حرفی عددی" باشد

(کاراکترهای حرفی عددی شامل حروف کوچک و بزرگ از a تا z، شامل ارقام از 0 تا 9، و شامل کاراکتر زیر خط _ است)

“w\”
W\ زمانی مطابقت پیدا می کند که رشته مورد نظر حاوی هیچ کاراکتر "حرفی عددی" نباشد “W\”
Z\ اگر نویسه های مشخص شده در انتهای رشته باشند، تطبیق پیدا می کند “Spain\Z”

مجموعه ها (Sets)

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

مجموعه ها (Sets) در پایتون (Python)
مجموعه کاراکتر توضیحات
[arn] زمانی مطابقت پیدا می کند که یکی از کاراکترهای (a، r یا n)  در رشته مورد نظر وجود داشته باشد
[a-n] زمانی مطابقت پیدا می کند که در رشته کاراکترهای حروف کوچک بین a تا n وجود داشته باشد
[arn^] مطابقت را برای هر کاراکتری به جز کاراکترهای a، r و n برمیگرداند
[0123] زمانی مطابقت پیدا می کند که یکی از اعداد (0، 1، 2 یا 3) در رشته مورد نظر وجود داشته باشد
[0-9] زمانی مطابقت پیدا می کند که در رشته کاراکترهای عددی بین 0 تا 9 وجود داشته باشد
[0-9][0-5] زمانی مطابقت پیدا می کند که در رشته اعداد دو رقمی بین 00 تا 59 وجود داشته باشد
[a-zA-Z] زمانی مطابقت پیدا می کند که رشته حاوی کاراکترهای کوچک و بزرگ بین a تا z باشد
[+] در مجموعه ها، +، *،  .، |، ()، $، {} معنی خاصی ندارند، پس [+] به معنی این است که مطابقت برای هر کاراکتر + در رشته را برمیگرداند

تابع  ()findall

این تابع لیستی را برمیگرداند که شامل موارد منطبق شده است.

مثال: در این مثال لیستی از تمام موارد منطبق شده را برمیگرداند.

import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)

تابع  ()findall برای ریجکس در پایتون (Python)

در مثال بالا لیستی از تمام ai های موجود در رشته را برمیگرداند.

این لیست شامل تطبیق هایی است که به ترتیب پیدا شده است.

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

مثال: در این مثال هیچ مورد منطبقی وجود ندارد و یک لیست خالی برگشت می دهد.

import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)

تابع  ()findall برای regex در پایتون (Python)

این تابع رشته را برای پیدا کردن یک تطابق جست جو می کند و در صورت پیدا کردن یک شی match برمیگرداند.

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

مثال: در این مثال به دنبال اولین فضای خالی (white space) می گردد.

import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("The first white-space character is located in position:", x.start())

تابع ()Search برای ریجکس در پایتون (Python)

اگر هیچ تطابقی یافت نشد، مقدار None را برگشت می دهد.

مثال: در این مثال هیچ مطابقتی یافت نمی شود و مقدار None برگشت داده می شود.

import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)

تابع ()Search برای regex در پایتون (Python)

تابع ()Split

این تابع لیستی را که رشته در هر تطابق تقسیم شده است را برمی گرداند.

مثال: در این مثال در صورت برخورد با فضای خالی در رشته آن را تقسیم می کند.

import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)

تابع ()Split برای ریجکس در پایتون (Python)

با تعیین پارامتر Maxsplit می توانید تعداد وقایع را کنترل کنید.

مثال: در این مثال رشته فقط در اولین فضای خالی (white space) پیدا شده تقسیم می شود.

import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)

تابع ()Split برای regex در پایتون (Python)

تابع ()Sub

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

مثال: در این مثال در رشته به جای فضای خالی (white space) مقدار 9 را جایگزین می کند.

import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)

تابع ()Sub برای ریجکس در پایتون (Python)

با تعیین پارامتر Count می توانید تعداد موارد جایگزین را کنترل کنید.

مثال: در این مثال در رشته فقط به جای 2 فضای خالی (white space) اول مقدار 9 جایگزین می کند.

import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)

تابع ()Sub برای regex در پایتون (Python)

Match Object

Match Object یک شی حاوی اطلاعات مربوط به جست جو و نتیجه است.

نکته: در صورت عدم وجود تطابق در رشته مقدار None به جای Match Object برگشت داده می شود.

مثال: در این مثال یک جستجو انجام شده که Match Object برگشت داده شده است.

import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) #this will print an object

Match Object در ریجکس پایتون (Python)

Match Object حاوی ویژگی ها و متدهایی است که برای بازیابی اطلاعات مربوط به جست جو و نتیجه استفاده می شود.

()Span. : که شامل یک چند تایی (Tuple) که حاوی موقعیت های شروع و پایان یک مطابقت است را برگشت می دهد.

string. : که رشته ارسال شده به تابع را برگشت می دهد.

()group. : قسمتی از رشته را که در آن مطابقت وجود داشت را برمی گرداند.

مثال: در این مثال عبارت منظم مشخص شده به دنبال کلماتی است که با حرف بزرگ “S” شروع شده اند و در آن موقعیت مکانی شروع و پایان اولین مطابقت پیدا شده را برمی گرداند.

import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())

Match Object در regex پایتون (Python)

مثال: در این مثال رشته ارسال شده به تابع را چاپ می کند.

import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)

Match Object در ریجکس پایتون (Python)

مثال: در این مثال عبارت منظم مشخص شده به دنبال کلماتی است که با حرف بزرگ “S” شروع شده اند و در آن بخشی از رشته را که در آن مطابقت وجود دارد را چاپ می کند.

import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())

Match Object در regex پایتون (Python)

توجه : در صورت عدم وجود تطابق در رشته مقدار None به جای Match Object برگشت داده می شود.

مطالعه بیشتر برای مفهوم regex  به صورت کاربردی : Regex چیست؟

بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده