آموزش پایتون

مدیریت فایل

RegEx در پایتون

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

ماژول RegEx

پایتون یک بسته داخلی به نام re دارد که می‌توان از آن برای کار با عبارات منظم (Regular Expression) استفاده کرد.

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

				
					import re
				
			

عبارات منظم (RegEx) در پایتون

هنگامی که ماژول re را وارد کردید، می توانید شروع به استفاده از عبارات منظم کنید:

مثال

رشته را جستجو کنید تا ببینید آیا با “The” شروع می شود و با “Spain” ختم می شود؟:
				
					import re

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

تابع RegEx

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

تابع
توضیح
findall
فهرستی حاوی همه موارد منطبق را برمی‌گرداند
search
در صورت وجود تطابق در هر نقطه ای از رشته، یک شیء Match را برمی گرداند
split
فهرستی را برمی‌گرداند که در آن رشته در هر انطباق تقسیم شده است
sub
یک یا چند انطباق را با یک رشته جایگزین می کند

متاکاراکتر | Metacharacters

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

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

سکانس‌های ویژه (Special Sequences )

یک سکانس ویژه یک \ به دنبال یکی از کاراکترهای لیست زیر است و معنای خاصی دارد:
کاراکتر
توضیحات
مثال
امتحان کنید
\A
اگر کاراکترهای مشخص شده در ابتدای رشته باشند، یک تطابق را برمی‌گرداند
“\AThe”
امتحان کنید
\b
تطابقی را برمی‌گرداند که در آن نویسه‌های مشخص شده در ابتدا یا انتهای یک کلمه هستند
r”\bain”
امتحان کنید
( کاراکتر "r"در ابتدا اطمینان حاصل می کند که رشته به عنوان یک “رشته خام” در نظر گرفته می شود)
r”ain\b”
امتحان کنید
\B
تطابقی را برمی‌گرداند که در آن نویسه‌های مشخص شده وجود دارند، اما نه در ابتدا (یا در انتهای) یک کلمه
r”\Bain”
امتحان کنید
(کاراکتر "r" در ابتدا اطمینان حاصل می کند که رشته به عنوان یک “رشته خام” در نظر گرفته می شود)
r”ain\B”
امتحان کنید
\d
تطابقی را برمی‌گرداند که در آن رشته دارای اعداد باشد (اعداد 0-9)
“\d”
امتحان کنید
\D
تطابقی را برمی‌گرداند که در آن رشته شامل اعداد نباشد
“\D”
امتحان کنید
\s
تطابقی را برمی‌گرداند که در آن رشته دارای کاراکتر فاصله است
“\s”
امتحان کنید
\S
تطابقی را برمی‌گرداند که در آن رشته دارای کاراکتر فاصله نباشد
“\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-5][0-9]
برای هر عدد دو رقمی از 00 تا 59 مطابقت را برمی‌گرداند
امتحان کنید
[a-zA-Z]
یک مطابقت برای هر کاراکتری بر اساس حروف الفبا بین a و z کوچک یا بزرگ نشان می دهد
امتحان کنید
[+]
در مجموعه‌ها، +، *، .، |، ()، $،{} معنای خاصی ندارد، بنابراین [+] به معنای: برگرداندن یک مطابقت برای هر کاراکتر + در رشته است.
امتحان کنید

تابع findall()

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

مثال

چاپ لیستی از همه موارد منطبق:
				
					import re

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

فهرست شامل موارد منطبق به ترتیب یافتن آنهاست.

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

مثال

اگر مطابقت پیدا نشد، لیست خالی را برمیگرداند:
				
					import re

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

مثال

جستجوی اولین کاراکتر فضای خالی در رشته:
				
					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 برگردانده می شود:

مثال

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

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

تابع split()

تابع split() در هر رشته از محل انطباق های موجود یک برش یا شکاف ایجاد میکند و یک لیست از بخش های ایجاد شده برمیگرداند:

مثال

در هر کاراکتر فضای خالی، یک برش ایجاد کنید:
				
					import re

txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
				
			
با تعیین پارامتر maxsplit می توانید تعداد رخدادها را کنترل کنید:

مثال

رشته را فقط در اولین رخداد (انطباق) تقسیم کنید:
				
					import re

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

تابع sub()

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

مثال

هر کاراکتر فضای خالی را با عدد 9 جایگزین کنید:
				
					import re

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

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

مثال

2 مورد اول را جایگزین کنید:
				
					import re

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

شیء مطابق (Match Object)

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

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

مثال

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

txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) #این یک شیء را برمیگرداند
				
			
Match Object دارای ویژگی ها و متد هایی است که برای بازیابی اطلاعات مربوط به جستجو و نتیجه استفاده می شود:
 
  • .span() یک تاپل حاوی موقعیت های شروع و پایان مسابقه را برمی گرداند.
  • string. رشته ارسال شده به تابع را برمی گرداند.
  • .group() بخشی از رشته را که در آن تطابق وجود دارد برمی گرداند.

مثال

موقعیت (موقعیت شروع و پایان) اولین وقوع تطابق را چاپ کنید.
عبارت منظم (Regular Expression) به دنبال هر کلمه ای است که با حرف بزرگ “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)
				
			

مثال

قسمتی از رشته که در آن تطابق وجود را دارد چاپ میکند:
عبارت منظم (Regular Expression) به دنبال هر کلمه ای است که با حرف بزرگ “S” شروع می شود:
				
					import re

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

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

آموزش پایتون

مدیریت فایل