مشخصات مقاله
-
6
-
0.0
-
8567
-
0
-
0
عبارات باقاعدهRegular expression/ در پایتون
تابع match
این تابع سعی می کند پارامتر pattern و string را با یکدیگر تطبیق دهد (پارامتر flags اختیاری می باشد).
در زیر دستور استفاده از این تابع را مشاهده می کنید:
re.match(pattern, string, flags=0)
جدول زیر پارامترهای ورودی این تابع را شرح می دهد:
تابع re.match در صورت یافتن مورد منطبق، در خروجی آبجکت match برمی گردانده و چنانچه مورد منطبقی یافت نشد، None مقدار خروجی خواهد بود. جهت یافتن و بازیابی عبارت منطبق در متن، توابع group(num) یا groups() از آبجکت match را فراخوانی می کنیم.
#!/usr/bin/python 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
تابع search
این تابع اولین نمونه از مقدار پارامتر pattern که مورد منطبق با آن را داخل پارامتر string می یابد، به عنوان خروجی بازگردانی می نماید.
دستور نحوی استفاده از این تابع در زیر شرح داده شده است:
re.search(pattern, string, flags=0)
جدول زیر پارامترهای این متد را همراه با شرح کاربرد هریک شرح می دهد:
در صورت یافتن مورد منطبق، تابع re.search یک آبجکت match در خروجی برمی گرداند و در غیر این صورت None را بازگردانی می نماید. با استفاده از توابع group(num) یا groups() می توان عبارات منطبق در رشته ی مورد نظر را استخراج و بازیابی نمود.
مقایسه ی دو متد Match و Search
پایتون جهت یافتن و استخراج مورد منطبق (الگو) در متن مورد نظر، دو عملیات پایه مبتنی بر عبارات باقاعده ارائه می دهد: 1. تطبیق الگو یا عبارت باقاعده با بخش اول پارامتر دوم (string) که توسط تابع match قابل پیاده سازی می باشد 2. تطبیق عبارات باقاعده و سعی بر یافتن مورد منطبق در کل پارامتر دوم (string) که توسط تابع search انجام می شود (زبان Perl در حالت پیش فرض عبارت باقاعده را با تمامی بخش های رشته تطبیق می دهد و در تمامی بخش های پارامتر دوم به دنبال مورد منطبق می گردد).
مثال#!/usr/bin/python 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
یافتن و جایگزینی مقدار در متن (search&replace)
یکی از مهم ترین متدهای ماژول re که عبارات باقاعده را به عنوان ورودی می گیرد، تابع sub می باشد.
دستور استفاده از متد
re.sub(pattern, repl, string, max=0)
این متد تمامی موارد منطبق با پارامتر pattern را با مقدار پارامتر repl جایگزین می کند. لازم به ذکر است که این متد تمامی موارد منطبق را جایگزین می کند مگر اینکه با مقداردهی پارامتر max بر آن محدودیت اعمال نمایید. خروجی تابع حاضر رشته ی ویرایش شده می باشد.
مثال#!/usr/bin/python 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
تنظیم و ویرایش عبارات باقاعده با استفاده از flag های اختیاری (Regular expression modifier)
literal ها یا مقادیر رشته ای محصور در تک کوتیشن که regular expression ها هستند را می توان به واسطه ی یک پارامتر اختیاری (optional flag/modifier) مطابق نیاز تنظیم کرده و عملیات انطباق و نیز استخراج مقدار مورد نظر از متن را به صورت اختصاصی انجام داد. modifier ها که به منظور تنظیم اختصاصی عملیات تطبیق و استخراج مقدار از آن استفاده می کنیم، در قالب پارامترهای اختیاری (optional flag) به متد مربوطه ارسال می شوند.
می توانید با استفاده از عملگر بیتی OR (|) چندین Modifier جهت تنظیم اختصاصی عملیات تطبیق تعریف نمایید.
الگوها و مجموعه کاراکترهایی که جهت تطبیق در عبارات باقاعده بکار می روند (Regular Expression Patterns)
به استثنای کاراکترهای کنترلی، (+ ? . * ^ $ ( ) [ ] { } | \)، تمامی کاراکترها در فرایند تطبیق با خودشان منطبق اعلام می شوند. شما می توانید با درج کاراکتر backslash قبل از کاراکترهای کنترلی آن ها را نیز escape کرده و امکان تطبیق با خودشان را فراهم آورید.
جدول زیر تمامی دستورات و الگوهایی که در پایتون جهت انطباق و استخراج موارد منطبق استفاده می شود را همراه با شرح کاربرد هریک لیست می نماید.
زمانی که متن خارج از [] باشد، با اول یا انتهای کلمه منطبق می شود. اگر متن داخل [] باشد، با کاراکتر backspace منطبق می شود.
اگر انتها یا ابتدای کلمه کاراکتری nonword باشد، با آن منطبق می شود.
نمونه هایی از عبارات با قاعده
کاراکترهای ثابت (literal)
Character class (مجموعه کاراکترها)
به واسطه ی این امکان توسعه دهنده می تواند به موتور regex اعلان کند که از میان چندین کاراکتر، تنها یکی را استخراج کند.
Character class ها (مجموعه کاراکترها)
Repetition Cases (مواردی که در آن چندبار انطباق رخ می دهد)
انطباق با کمترین تعداد مورد تکراری در رشته (nongreedy repetition)
با کمترین تعداد مورد تکراری (بخش قبلا یافته و استخراج شده) در رشته ی مورد نظر منطبق می شود:
مشخص کردن انتها و ابتدای موقعیت استخراج با پرانتز (Grouping)
Backreferences (تطبیق مجدد و استفاده از بخش های یافته شده ی قبلی)
Backreferences (تطبیق مجدد و استخراج مورد منطبق قبلی) تطبیق و استخراج گروهی که قبلا انطباق با آن رخ داده را فراهم می آورد.
نمونه های دیگر از عبارات باقاعده
Anchor ها در عبارات باقاعده
Anchor ها به کاراکتر خاصی اشاره نمی کنند، بلکه محل استخراج (match position) را مشخص کرده و به موقعیت انطباق اشاره می کنند.