ماژول 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
ماژول re مجموعه ای از توابع دارد که از آن ها می توانیم برای جست جو یک رشته برای مطابقت داشتن استفاده کنیم.
تابع | توضیحات |
---|---|
Findall | لیستی را که شامل همه موارد منطبق است، برمیگرداند |
Search | اگر در هر جایی از رشته مطابقت وجود داشته باشد، یک match object را که در ادامه مقاله در مورد آن توضیح می دهیم برمیگرداند |
Split | لیستی را که رشته در هر تطابق تقسیم شده است، برمیگرداند |
Sub | یک یا چند مورد منطبق را با یک رشته جایگزین می کند |
در ادامه این مقاله به هر کدام از این توابع به طور اختصاصی با ذکر مثال خواهیم پرداخت.
Metacharacters
Metacharacters، کاراکترهایی خاص با معانی خاص هستند که در جدول زیر آن ها را برای شما توضیح داده ایم.
کاراکتر | توضیحات | مثال |
---|---|---|
[] | یک مجموعه از کاراکترها برای تطابق | “[a-m]” |
\ | توالی خاصی را نشان می دهد (همچنین می تواند برای پرش از کاراکترهای خاص استفاده شود)، در ادامه جدولی از توالی های خاص را برای شما آورده ایم | “\d” |
. | هر مقداری که تعدادش کاراکترهای آن (هر کاراکتری به جز کاراکتر newline) با تعداد (.) ها مطابقت داشته باشد | “he..o” |
^ | بررسی شروع رشته با مقدار مشخص | “hello^” |
$ | بررسی خاتمه رشته با مقدار مشخص | “world$” |
* | وجود صفر تطابق یا بیشتر برای رشته مشخص شده | “aix*” |
+ | وجود یک تطابق یا بیشتر برای رشته مشخص شده | “aix+” |
{} | مشخص کردن وجود حداکثر و حداقل الگوی مشخص شده | “al{2}” |
| | یا، یعنی از هر کدام بود تطابق را اعلام کن | “falls|stays” |
() | برای گروه کردن زیر الگوها |
توالی های خاص
یک توالی خاص یک backslash (\) با یک کاراکتر به دنبال آن است که معنی خاصی دارد که در جدول زیر هر کدام از آن ها را بررسی کرده ایم.
کاراکتر | توضیحات | مثال |
---|---|---|
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)
مجموعه به مجموعه ای از کاراکترها داخل یک جفت کورشه گفته می شود که معنای خاصی دارند، در زیر جدولی از این کاراکترها را برای شما آورده ایم.
مجموعه کاراکتر | توضیحات |
---|---|
[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)
در مثال بالا لیستی از تمام ai های موجود در رشته را برمیگرداند.
این لیست شامل تطبیق هایی است که به ترتیب پیدا شده است.
اگر هیچ مورد قابل تطابقی یافت نشود، یک لیست خالی برگشت داده می شود.
مثال: در این مثال هیچ مورد منطبقی وجود ندارد و یک لیست خالی برگشت می دهد.
import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)
تابع ()Search
این تابع رشته را برای پیدا کردن یک تطابق جست جو می کند و در صورت پیدا کردن یک شی 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())
اگر هیچ تطابقی یافت نشد، مقدار None را برگشت می دهد.
مثال: در این مثال هیچ مطابقتی یافت نمی شود و مقدار None برگشت داده می شود.
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
تابع ()Split
این تابع لیستی را که رشته در هر تطابق تقسیم شده است را برمی گرداند.
مثال: در این مثال در صورت برخورد با فضای خالی در رشته آن را تقسیم می کند.
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
با تعیین پارامتر Maxsplit می توانید تعداد وقایع را کنترل کنید.
مثال: در این مثال رشته فقط در اولین فضای خالی (white space) پیدا شده تقسیم می شود.
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
تابع ()Sub
این تابع متن مشخص شده را جایگزین موارد منطبق در جمله می کند.
مثال: در این مثال در رشته به جای فضای خالی (white space) مقدار 9 را جایگزین می کند.
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
با تعیین پارامتر Count می توانید تعداد موارد جایگزین را کنترل کنید.
مثال: در این مثال در رشته فقط به جای 2 فضای خالی (white space) اول مقدار 9 جایگزین می کند.
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
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 حاوی ویژگی ها و متدهایی است که برای بازیابی اطلاعات مربوط به جست جو و نتیجه استفاده می شود.
()Span. : که شامل یک چند تایی (Tuple) که حاوی موقعیت های شروع و پایان یک مطابقت است را برگشت می دهد.
string. : که رشته ارسال شده به تابع را برگشت می دهد.
()group. : قسمتی از رشته را که در آن مطابقت وجود داشت را برمی گرداند.
مثال: در این مثال عبارت منظم مشخص شده به دنبال کلماتی است که با حرف بزرگ “S” شروع شده اند و در آن موقعیت مکانی شروع و پایان اولین مطابقت پیدا شده را برمی گرداند.
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
مثال: در این مثال رشته ارسال شده به تابع را چاپ می کند.
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
مثال: در این مثال عبارت منظم مشخص شده به دنبال کلماتی است که با حرف بزرگ “S” شروع شده اند و در آن بخشی از رشته را که در آن مطابقت وجود دارد را چاپ می کند.
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())
توجه : در صورت عدم وجود تطابق در رشته مقدار None به جای Match Object برگشت داده می شود.
مطالعه بیشتر برای مفهوم regex به صورت کاربردی : Regex چیست؟