آموزش عبارات منظم در برنامه نویسی پایتون ۳

3 سال پیش
آموزش عبارات منظم در برنامه نویسی پایتون 3

 آموزش عبارات منظم در برنامه نویسی پایتون ۳

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش عبارات منظم در برنامه نویسی پایتون ۳ خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پایتون

یک عبارت منظم، دنباله خاصی از کاراکترها است که به شما کمک می‌کند تا رشته‌ها یا مجموعه‌ای از رشته‌ها را با استفاده از یک نحو تخصصی که در یک الگو قرار دارد مطابقت دهید یا پیدا کنید. عبارات منظم به طور گسترده در دنیای یونیکس استفاده می شود.

ماژول re از عبارات منظم پرل مانند در پایتون پشتیبانی کامل می کند. اگر هنگام کامپایل کردن یا استفاده از یک عبارت منظم خطایی رخ دهد، ماژول re خطای re.error استثنایی را افزایش می دهد.

ما دو تابع مهم را پوشش می دهیم که برای رسیدگی به عبارات منظم استفاده می شود. با این وجود، ابتدا یک چیز کوچک: کاراکترهای مختلفی وجود دارند که وقتی در بیان منظم استفاده می شوند، معنای خاصی خواهند داشت. برای جلوگیری از هرگونه سردرگمی در هنگام برخورد با عبارات منظم، از رشته های خام به عنوان r’expression استفاده می کنیم.

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

۱ a, X, 9, <

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

۲ . (a period)

با هر کاراکتری به جز خط جدید “\n” مطابقت دارد

۳ \w

با یک کاراکتر “کلمه” مطابقت دارد: یک حرف یا رقم یا زیر نوار [a-zA-Z0-9_].

۴ \W

با هر کاراکتر غیر کلمه ای مطابقت دارد.

۵ \b

مرز بین کلمه و غیر کلمه

۶ \s

منطبق بر یک کاراکتر فضای خالی – فاصله، خط جدید، بازگشت، برگه

۷ \S

با هر کاراکتر غیر فضای سفید مطابقت دارد.

۸ \t, \n, \r

برگه، خط جدید، بازگشت

۹ \d

رقم اعشاری [۰-۹]

۱۰ ^

مسابقات شروع رشته

۱۱ $

با انتهای رشته مطابقت دهید

۱۲ \

از ویژگی یک کاراکتر جلوگیری می کند.

 

پرچم های تالیفی
پرچم های کامپایل به شما امکان می دهند برخی از جنبه های نحوه عملکرد عبارات منظم را تغییر دهید. پرچم‌ها در ماژول re با دو نام موجود هستند، یک نام طولانی مانند IGNORECASE و یک فرم کوتاه و تک حرفی مانند I.

۱ ASCII, A

باعث می شود چندین فرار مانند \w، \b، \s و \d فقط روی کاراکترهای ASCII با ویژگی مربوطه مطابقت داشته باشند.

۲ DOTALL, S

ساختن، مطابقت با هر کاراکتر، از جمله خطوط جدید

۳ IGNORECASE, I

مچ شدن بدون حروف بزرگ را انجام دهید

۴ LOCALE, L

یک مچ شدن آگاه از منطقه انجام دهید

۵ MULTILINE, M

تطبیق چند خطی که بر ^ و $ تأثیر می گذارد

۶ VERBOSE, X (for ‘extended’)

REهای پرمخاطب را فعال کنید، که می توانند به طور تمیزتر و قابل درک تر سازماندهی شوند

 

تابع match

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

در اینجا نحو این تابع – است

re.match(pattern, string, flags = 0)

 

در اینجا توضیحات پارامترها آمده است

۱ pattern

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

۲ string

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

۳ flags

شما می توانید پرچم های مختلف را با استفاده از بیت OR (|) مشخص کنید. اینها اصلاح کننده هایی هستند که در جدول زیر آورده شده است.

 

تابع re.match یک شیء تطبیق را در صورت موفقیت، هیچ کدام را در صورت شکست برمی‌گرداند. ما از تابعgroup(num) یا ()group شیء match استفاده می کنیم تا عبارت مطابقت یافته را بدست آوریم.

۱ group(num = 0)

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

۲ ()groups

این روش همه زیرگروه‌های منطبق را در یک تاپل برمی‌گرداند (اگر وجود نداشت، خالی است)

 

مثال

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

 

تابع جستجو

این تابع اولین رخداد الگوی RE را در رشته با پرچم های اختیاری جستجو می کند.

در اینجا نحو این تابع – است

re.search(pattern, string, flags = 0)

 

در اینجا توضیحات پارامترها آمده است

۱ pattern

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

۲ string

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

۳ flags

شما می توانید پرچم های مختلف را با استفاده از بیت OR (|) مشخص کنید. اینها اصلاح کننده هایی هستند که در جدول زیر آورده شده است.

 

تابع re.search یک شی تطبیق را در صورت موفقیت برمی گرداند و هیچ کدام را در صورت شکست. ما از تابع group(num) یا group() شیء match برای بدست آوردن عبارت مطابقت استفاده می کنیم.

۱ group(num = 0)

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

۲ ()groups

این روش همه زیرگروه‌های منطبق را در یک تاپل برمی‌گرداند (اگر وجود نداشت، خالی است)

 

 

مثال

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print ("searchObj.group() : ", searchObj.group())
   print ("searchObj.group(1) : ", searchObj.group(1))
   print ("searchObj.group(2) : ", searchObj.group(2))
else:
   print ("Nothing found!!")

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

 

تطبیق در مقابل جستجو

پایتون دو عملیات ابتدایی مختلف را بر اساس عبارات منظم ارائه می‌کند: بررسی تطبیق برای یک تطابق فقط در ابتدای رشته، در حالی که جستجو یک تطابق را در هر نقطه از رشته بررسی می‌کند (این کاری است که پرل به طور پیش‌فرض انجام می‌دهد).

مثال

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print ("search --> searchObj.group() : ", searchObj.group())
else:
   print ("Nothing found!!")

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

No match!!
search --> matchObj.group() :  dogs

 

جستجو و جایگزینی

یکی از مهم ترین روش های re که از عبارات منظم استفاده می کند، sub است.

re.sub(pattern, repl, string, max=0)

 

این روش همه رخدادهای الگوی RE را در رشته با repl جایگزین می‌کند و همه رخدادها را جایگزین می‌کند مگر اینکه حداکثر ارائه شده باشد. این متد رشته اصلاح شده را برمی گرداند.

مثال

#!/usr/bin/python3
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print ("Phone Num : ", num)

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print ("Phone Num : ", num)

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

Phone Num :  2004-959-559
Phone Num :  2004959559

 

اصلاح کننده های عبارت منظم: پرچم های گزینه

اصطلاحات عبارت منظم ممکن است شامل یک اصلاح کننده اختیاری برای کنترل جنبه های مختلف تطبیق باشد. اصلاح کننده ها به عنوان یک پرچم اختیاری مشخص می شوند. همانطور که قبلا نشان داده شده است، می توانید چندین اصلاح کننده را با استفاده از OR (|) انحصاری ارائه دهید و ممکن است با یکی از اینها نشان داده شود –

Sr.No. Modifier & Description
۱ re.I

تطبیق غیر حساس به حروف بزرگ را انجام می دهد.

۲ re.L

کلمات را با توجه به محل فعلی تفسیر می کند. این تفسیر بر گروه الفبایی (\w و \W) و همچنین رفتار مرزی کلمه (\b و \B) تأثیر می گذارد.

۳ re.M

باعث می شود $ با انتهای یک خط (نه فقط انتهای رشته) مطابقت داشته باشد و ^ با شروع هر خط (نه فقط شروع رشته) مطابقت داشته باشد.

۴ re.S

نقطه (نقطه) را با هر کاراکتری، از جمله خط جدید، مطابقت می دهد.

۵ re.U

حروف را با توجه به مجموعه کاراکترهای یونیکد تفسیر می کند. این پرچم بر رفتار \w، \W، \b، \B تأثیر می‌گذارد.

۶ re.X

اجازه نحو بیان منظم “cuter”. فضای سفید را نادیده می گیرد (به جز در داخل مجموعه [] یا زمانی که با علامت بک اسلش خارج می شود) و # بدون گریز را به عنوان نشانگر نظر در نظر می گیرد

 

مثال های عبارت منظم

 

کلاس های کاراکتر

۱ [Pp]ython

مطابقت با “Python” یا “Python”

۲ rub[ye]

مطابقت  “ruby” یا “rube”

۳ [aeiou]

با هر یک از حروف صدادار کوچک مطابقت دهید

۴ [۰-۹]

مطابقت با هر رقم. همانند [۰۱۲۳۴۵۶۷۸۹]

۵ [a-z]

با حروف کوچک ASCII مطابقت دهید

۶ [A-Z]

هر حرف ASCII بزرگ را مطابقت دهید

۷ [a-zA-Z0-9]

با هر یک از موارد بالا مطابقت دهید

۸ [^aeiou]

هر چیزی غیر از حروف صدادار کوچک را مطابقت دهید

۹ [^۰-۹]

هر چیزی غیر از یک رقم را مطابقت دهید

 

کلاس های ویژه کاراکتر ها

Sr.No. Example & Description
۱ .

با هر کاراکتری به جز خط جدید مطابقت دهید

۲ \d

مطابقت با یک رقم: [۰-۹]

۳ \D

مطابقت با یک غیر رقمی: [^۰-۹]

۴ \s

تطبیق یک کاراکتر فضای خالی: [\t\r\n\f]

۵ \S

مطابقت با فضای خالی: [^ \t\r\n\f]

۶ \w

یک کاراکتر کلمه را مطابقت دهید: [A-Za-z0-9_]

۷ \W

مطابقت با یک نویسه غیرکلمه: [^A-Za-z0-9_]

 

موارد تکرار

Sr.No. Example & Description
۱ ruby?

“”: the y is optional مطابقت باrub” or “rub “: –

۲ ruby*

یا بیشتر ys مطابقت دهید “rub” plus 0 or more ys

۳ ruby+

“rub”  را به اضافه ۱ یا بیشتر ys مطابقت دهید

۴ \d{3}

دقیقاً ۳ رقم را مطابقت دهید

۵ \d{3,}

۳ رقم یا بیشتر را مطابقت دهید

۶ \d{3,5}

۳، ۴ یا ۵ رقم را مطابقت دهید

 

انکر ها

این باید موقعیت تطابق را مشخص کند.

Sr.No. Example & Description
۱ ^Python

“Python” را در شروع یک رشته یا خط داخلی مطابقت دهید

۲ Python$

“Python” را در انتهای یک رشته یا خط مطابقت دهید

۳ \APython

“Python” را در شروع یک رشته مطابقت دهید

۴ Python\Z

“Python” را در انتهای یک رشته مطابقت دهید

۵ \bPython\b

“Python” را در یک مرز کلمه مطابقت دهید

۶ \brub\B

\B مرز غیرکلمه ای است: “rub” را در “rube” و “ruby” مطابقت دهید اما نه به تنهایی

۷ Python(?=!)

اگر با علامت تعجب دنبال شود، “Python” را مطابقت دهید.

۸ Python(?!!)

اگر با علامت تعجب دنبال نشود، “Python” را مطابقت دهید.

 

نحو ویژه با پرانتز

 

Sr.No. Example & Description
۱ R(?#comment)

مطابق با “R”. بقیه همه یک نظر است

۲ R(?i)uby

حساس به حروف کوچک و بزرگ در حین مطابقت با “uby”

۳ R(?i:uby)

مانند بالا

۴ rub(?:y|le))

 

 

منبع.

 

لیست جلسات قبل آموزش برنامه نوبسی پایتون ۳

  1. آموزش برنامه نویسی پایتون ۳
  2. آموزش موارد جدید در برنامه نویسی پایتون ۳
  3. آموزش مرور کلی برنامه نویسی پایتون ۳
  4. آموزش راه اندازی محیط برنامه نویسی پایتون ۳
  5. آموزش نحو در برنامه نویسی پایتون ۳
  6. آموزش انواع متغیرها در برنامه نویسی پایتون ۳
  7.  آموزش عملگرهای پایه در برنامه نویسی پایتون ۳
  8.  آموزش تصمیم گیری در برنامه نویسی پایتون ۳
  9.  آموزش حلقه ها در برنامه نویسی پایتون ۳
  10. آموزش اعداد در برنامه نویسی پایتون ۳
  11. آموزش رشته ها در برنامه نویسی پایتون ۳
  12.  آموزش لیست ها در برنامه نویسی پایتون ۳
  13.  آموزش تاپل ها در برنامه نویسی پایتون ۳
  14. آموزش دیکشنری در برنامه نویسی پایتون ۳
  15.  آموزش تاریخ و زمان در برنامه نویسی پایتون ۳
  16.  آموزش توابع در برنامه نویسی پایتون ۳
  17. آموزش ماژول ها در برنامه نویسی پایتون ۳
  18. آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون ۳
  19. آموزش مدیریت استثنا در برنامه نویسی پایتون ۳
  20. آموزش شی گرایی در برنامه نویسی پایتون ۳
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه