Python RegEx
RegEx یا Regular Expression یا همان عبارات با قاعده (منظم)، دنبالهای از کاراکترها هستند که یک الگوی جستجو را شکل میدهند.
با استفاده از RegEx میتوان در یک رشته جهت بررسی وجود یا عدم وجود یک الگو به جستجو پرداخت.
مدول RegEx
همراه با پایتون یک پکیج به اسم re
وجود دارد که امکان کار کردن با عبارتهای با قاعده را برای ما فراهم میکند.
بعد از وارد کردن این مدول میتوانیم کار کردن با عبارت با قاعده را شروع کنیم. برای نمونه در کد زیر جستجو میکنیم که آیا رشته با The شروع و با Spain خاتمه یافته است یا خیر.
توابع RegEx
مدول re
یک سری توابع را پیشنهاد میکند که با استفاده از آنها میتوان داخل یک رشته را برای یافتن الگویی خاص جستجو کرد.
تابع | توضیح |
findall() |
یک لیست حاوی همه موارد منطبق را برمیگرداند. |
search() |
اگر در هرجایی از رشته مورد منطبقی وجود داشته باشد، یک Match object را برمیگرداند. |
split() |
یک لیست را برمیگرداند که در آن رشته در هر مورد منطبق جدا شده است. |
sub() |
یک یا تعداد بیشتری از موارد منطبق را با یک رشته دیگر جایگزین میکند. |
متا کاراکترها
Metacharacters کاراکترهایی با یک معنی خاص هسنند.
کاراکتر | توضیح | مثال |
[] |
مجموعهای از کاراکترها | "[a-m]" |
\ |
اعلام یک توالی خاص (همچنین برای فرار کاراکترهای خاص به کار میرود) | "d\" |
. |
هر کاراکتری به جز کاراکتر خط جدید | "he..o" |
^ |
شروع شود با | "hello^" |
$ |
پایان یافتن با | "$planet" |
* |
صفر یا تعداد مرتبه بیشتری رخ داده باشد | "he.*o" |
+ |
یک یا تعداد مرتبه بیشتری رخ داده باشد | "he.+o" |
? |
صفر یا یک مرتبه رخ داده باشد | "he.?o" |
{} |
دقیقاً به اندازه مشخص شده رخ داده باشد | "he.{2}o" |
| |
هر یک از | "falls|stays" |
() |
دسته بندی کردن |
دنبالههای خاص
دنباله خاص دنبالهای است که با \
شروع و با یکی از کاراکترهای جدول زیر ادامه مییابد و دارای معنی خاصی است.
کاراکتر | توضیح | |
\A |
در صورتی که کاراکترهای مشخص شده در اول رشته باشند آن را به عنوان موردمنطبق برمیگرداند. | "AThe\" |
\b |
در صورتی که کاراکترهای مشخص شده در ابتدا و یا انتهای رشته موجود باشند، آن را به عنوان مورد منطبق برمیگرداند. "r" در ابتدا باعث میشود مطمئن شویم رشته به صورت "raw string" بررسی میشود. |
"r"\bain "r"ain\b |
\B |
در صورتی که کاراکترهای مشخص شده در رشته وجود داشته ولی در ابتدا و یا انتهای رشته نباشند، آن را به عنوان مورد منطبق برمیگرداند. "r" در ابتدا باعث میشود مطمئن شویم رشته به صورت "raw string" بررسی میشود. |
"r"\Bain "r"ain\B |
\d |
هر گاه رشته دارای رقم (اعداد از صفر تا 9) باشد، آن را به عنوان مورد منطبق برمیگرداند. | "d\" |
\D |
هر گاه رشته دارای رقم نباشد، آن را به عنوان مورد منطبق برمیگرداند. | "D\" |
\s |
هرگاه رشته دارای کاراکتر فاصله (white space character) باشد، آن رابه عنوان مورد منطبق برمیگرداند. | "s\" |
\S |
هرگاه رشته دارای کاراکتر فاصله (white space character) نباشد، آن رابه عنوان مورد منطبق برمیگرداند. | "S\" |
\w |
هرگاه رشته دارای هر کاراکتری از a تا Z، از صفر تا 9 و یا علامت زیرخط باشد، به عنوان مورد منطبق برگردانده میشود. | "w\" |
\W |
هرگاه رشته دارای هیچ کاراکتری از a تا Z، از صفر تا 9 و یا علامت زیرخط نباشد، به عنوان مورد منطبق برگردانده میشود. | "W\" |
\Z |
اگر کاراکترهای مشخص شده در انتهای رشته باشند، آن را به عنوان مورد منطبق برمیگرداند. | "Spain\Z" |
مجموعهها
منظور از مجموعه در اینجا، مجموعهای از کاراکترها داخل علامت کروشه با یک معنی خاص است.
مجموعه | توضیح |
[arn] |
اگر یکی از کاراکترهای مشخص شده (a, r یا n) در رشته وجود داشته باشد به عنوان یک مورد منطبق برگردانده میشود. |
[a-n] |
در صورت وجود هر کاراکتری (حروف کوچک) بین a و n در رشته، به عنوان مورد منطبق برگردانده میشود. |
[^arn] |
در صورتی وجود هر کاراکتری به جز کارکاترهای مشخص شده (a, r یا n) در رشته، به عنوان مورد منطبق برگردانده میشود. |
[0123] |
در صورتی که هر یک از اعداد مشخص شده (0، 1، 2 یا 3) در رشته وجود داشته باشد، به عنوان مورد منطبق برگردانده میشود. |
[0-9] |
در صورتی که هریک از ارقام بین صفر تا 9 در رشته وجود داشته باشد، به عنوان مورد منطبق برگردانده میشود. |
[0-5][0-9] |
در صورت وجود هر یک از اعداد دو رقمی از 00 تا 59 در رشته، به عنوان مورد منطبق برگردانده میشود. |
[a-zA-Z] |
در صورت وجود هر یک از حروف الفبا چه به صورت حروف کوچک یا بزرگ در رشته، به عنوان مورد منطبق برگردانده میشود. |
[+] |
در مجموعهها، کاراکترهای +, *, ., |, (), $, {} هیچ معنی خاصی ندارند. بنابراین [+] در صورت وجود علامت + در رشته، آن را به عنوان مورد منطبق برمیگرداند. |
تابع ()findall
تابع findall()
یک لیست حاوی همه موارد منطبق را برمیگرداند.
لیست حاوی موارد منطبق بر اساس ترتیبی است که یافت میشوند.
در صورتی که هیچ مورد منطبقی یافت نشود، یک لیست خالی برگردانده میشود.
تابع ()search
تابع search()
در رشته به دنبال یک مورد منطبق میگردد و در صورت پیدا کردن آن یک Match object را برمیگرداند.
در صورتی که بیشتر از یک مورد منطبق هم وجود داشته باشد، تنها اولین مورد رخ داده را برمیگرداند.
در صورتی که هیچ مورد منطبقی وجود نداشته باشد، مقدار None
برگردانده میشود.
تابع ()split
تابع split()
لیستی را برمیگرداند که در آن رشته در هر جا که مورد منطیق وجود دارد از هم جدا شده است.
میتوانید حداکثر تعداد مرتبههایی که انطباق رخ میدهد را توسط تعیین پارامتر maxsplit
کنترل کنید.
تابع ()sub
تابع sub()
موارد منطبق در رشته را با متن مورد نظر شما جایگزین میکند. برای نمونه در کد زیر تمامی فاصلهها را با عدد 9 جایگزین کردهایم.
میتوان تعداد مرتبههایی که جایگزینی رخ میدهد را با تعیین پارامتر count
کنترل کرد.
شیء ()match
شیء Match شیء است حاوی اطلاعاتی درباره جستجو و نتیجه.
None
برگردانده میشود.
شیء Match دارای خصوصیات و توابع شیء است که با استفاده از آنها میتوان اطلاعاتی در مورد جستجو و نتیجه به دست آورد.
span()
: یک تاپل شامل مکانهای شروع و پایان مورد منطبق را برمیگرداند.string()
: رشته داده شده به تابع را برمیگرداند.group()
: قسمتی از رشته که در آنجا مطابقت وجود دارد را برمیگرداند.