RegEx

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو
Main Page Tutorial
Python-menu.png
موارد آموزشی
۱خانه
۲مقدمه
۳شروع کار
۴دستور زبان
۵توضیحات
۶متغیرها
۷انواع داده‌ها
۸اعداد
۹تبدیل نوع
۱۰رشته‌ها
۱۱Booleans
۱۲عملگرها
۱۳لیست‌ها
۱۴تاپل‌ها
۱۵مجموعه‌ها
۱۶دیکشنری‌ها
۱۷If...Else
۱۸حلقهٔ While
۱۹حلقهٔ For
۲۰توابع
۲۱Lambda
۲۲آرایه‌ها
۲۳کلاس‌ها / اشیاء
۲۴ارث‌بری
۲۵Iteratorها
۲۶دامنه
۲۷ماژول‌ها
۲۸تاریخ و زمان
۲۹JSON
۳۰RegEx
۳۱PIP
۳۲Try...Except
۳۳ورودی کاربر
۳۴قالب‌بندی رشته
مدیریت فایل
یادگیری ماشین
MySQL در پایتون
MongoDB در پایتون
مرجع پایتون
مرجع ماژول
چگونه در پایتون؟
مثال‌های پایتون

RegEx یا عبارت منظم، دنباله ای از کاراکترها است که یک الگوی جستجو را تشکیل می‌دهد.[۱]

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

ماژول RegEx

پایتون یک بستهٔ داخلی (به انگلیسی: built-in package) به نام re دارد که می‌توان برای کار با عبارت‌های منظم از آن استفاده کرد.

وارد کردن ماژول re:

import re

RegEx در پایتون

هنگامی که ماژول re را اضافه کردید (به انگلیسی: Import)، می‌توانید از عبارت‌های منظم استفاده کنید:

مثال

رشته را جستجو می‌کند تا بفهمد آیا با “The” شروع و با “Spain” تمام می‌شود یا نه:

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


مشاهدهٔ نتیجه


توابع RegEx

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

تابع تعریف
findall لیستی شامل همهٔ مطابقت‌ها را برمی‌گرداند
search اگر در هر جایی از رشته مطابقتی وجود داشته باشد، یک Match object برمی‌گرداند
split لیستی از بخش‌هایی برمی‌گرداند که رشته برای هر تطبیق جدا می‌شود
sub یک یا چند مطابقت را با یک رشته جایگزین می‌کند

متا کاراکترها (به انگلیسی: Metacharacters)

Metacharacters کاراکترهایی با معنای خاص هستند:

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

دنباله های خاص

دنباله خاص یک \ به همراه یکی از کاراکترهای لیست زیر است و معنای خاصی دارد:

کاراکتر تعریف مثال امتحان کنید
\A اگر کاراکترهای تعیین شده در ابتدای رشته باشند، یک مطابقت را برمی‌گرداند "\AThe" مشاهدهٔ نتیجه
\b درصورتیکه کاراکترهای تعیین شده در ابتدای یا انتهای یک کلمه باشند، یک مطابقت را برمی‌گرداند r"\bain"

r"ain\b"

مشاهدهٔ نتیجه

مشاهدهٔ نتیجه

\B درصورتیکه کاراکترهای تعیین شده حضور داشته باشند اما نه در ابتدای (یا انتهای) یک کلمه باشند، یک مطابقت را برمی‌گرداند r"\Bain"

r"ain\B"

مشاهدهٔ نتیجه

مشاهدهٔ نتیجه

\d درصورتیکه رشته دارای ارقام (اعداد بین ۰-۹) باشند، یک مطابقت را برمی‌گرداند "\d" مشاهدهٔ نتیجه
\D درصورتیکه رشته دارای عدد نباشد، یک مطابقت را برمی‌گرداند "\D" مشاهدهٔ نتیجه
\s درصورتیکه رشته دارای کاراکترهای فاصله باشد، یک مطابقت را برمی‌گرداند "\s" مشاهدهٔ نتیجه
\S درصورتیکه رشته دارای کاراکترهای فاصله نباشد، یک مطابقت را برمی‌گرداند "\S" مشاهدهٔ نتیجه
\w درصورتیکه رشته دارای هر کاراکتر کلمه ای باشد، یک مطابقت را برمی‌گرداند (کاراکترهای از a تا Z، ارقام ۰-۹ و کاراکتر _) "\w" مشاهدهٔ نتیجه
\W درصورتیکه رشته هیچ کاراکتر کلمه‌ای نداشته باشد، یک مطابقت را برمی‌گرداند "\W" مشاهدهٔ نتیجه
\Z درصورتیکه کاراکترهای مشخص شده در انتهای رشته باشد، یک مطابقت را برمی‌گرداند "Spain\Z" مشاهدهٔ نتیجه

مجموعه ها

یک مجموعه، مجموعه ای از کاراکترها داخل یک جفت براکت [] و با معنای خاص است:

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

تابع findall()

تابع findall() لیستی از همهٔ مطابقت‌های (به انگلیسی: matches) موجود را برمی‌گرداند.

مثال

لیستی از همهٔ مطابقت‌ها برمی‌گرداند:

1 import re
2 
3 txt = "The rain in Spain"
4 x = re.findall("ai", txt)
5 print(x)


مشاهدهٔ نتیجه


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

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

مثال

اگر هیچ مطابقتی پیدا نکند، یک لیست خالی را برمی‌گرداند:

1 import re
2 
3 txt = "The rain in Spain"
4 x = re.findall("Portugal", txt)
5 print(x)


مشاهدهٔ نتیجه


تابع search()

تابع search() رشته را برای بافتن مظابقت‌ها جستجو می‌کند و در صورت یافتن مطابقت یک Match object را برمی‌گرداند.

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

مثال

اولین ظهور کاراکتر فاصله خالی در رشته را جستجو می‌کند:

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


مشاهدهٔ نتیجه


اگر هیچ مطابقتی پیدا نشد، مقدار None را برمی‌گرداند:

مثال

جستجویی را انجام می‌دهد که هیچ مطابقتی را برنمی‌گرداند:

1 import re
2 
3 txt = "The rain in Spain"
4 x = re.search("Portugal", txt)
5 print(x)


مشاهدهٔ نتیجه


تابع split()

تابع split() لیستی را برمی‌گرداند که در آن رشته در هر مطابقت تقسیم شده‌است:

مثال

در هر کاراکتر فاصله خالی تقسیم شده‌است:

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


مشاهدهٔ نتیجه


می‌توانید تعداد وقوع‌ها را با مشخص کردن پارامتر maxsplit کنترل کنید:

مثال

رشته را فقط در اولین وقوع تقسیم می‌کند:

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


مشاهدهٔ نتیجه


تابع sub()

تابع sub() مطابقت‌ها را با متن مورد نظر شما جایگزین می‌کند:

مثال

همهٔ کاراکترهای فاصله خالی را با عدد ۹ جایگزین می‌کند:

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


مشاهدهٔ نتیجه


می‌توانید تعداد جایگزینی‌ها را با تعیین پارامتر count کنترل کنید:

مثال

دو وقوع اول را جایگزین می‌کند:

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


مشاهدهٔ نتیجه


Match Object

Match Object (به فارسی: شیء مطابقت) شیءی شامل اطلاعات مربوط به جستجو و نتایج آن است.

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

مثال

جستجویی انجام می‌دهد که یک Match Object برمی‌گرداند:

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


مشاهدهٔ نتیجه


متدها و خصوصیت‌های Match Object برای بازیابی اطلاعات در مورد جستجو و نتیجه آن استفاده می‌شوند:

.span() تاپلی شامل مکان شروع و پایان مطابقت را برمی‌گرداند.

.string رشتهٔ پاس شده به تابع را برمی‌گرداند

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

مثال

مکان (مکان شروع و پایان) اولین وقوع مطابقت را چاپ می‌کند.

عبارت منظم هر کلمه ای که با “S” بزرگ شروع شده باشد را جستجو می‌کند:

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


مشاهدهٔ نتیجه


مثال

رشتهٔ پاس شده به تابع را چاپ می‌کند:

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


مشاهدهٔ نتیجه


مثال

بخشی از رشته که مطابقت در آن وجود دارد را چاپ می‌کند.

عبارت منظم هر کلمه ای که با “S” بزرگ شروع شده باشد را جستجو می‌کند:

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


مشاهدهٔ نتیجه

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


منابع آموزشی