RegEx
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 کاراکترهایی با معنای خاص هستند:
دنباله های خاص
دنباله خاص یک \
به همراه یکی از کاراکترهای لیست زیر است و معنای خاصی دارد:
مجموعه ها
یک مجموعه، مجموعه ای از کاراکترها داخل یک جفت براکت []
و با معنای خاص است:
تابع 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 برگردانده میشود.
منابع آموزشی