عبارات با قاعده در برنامه نویسی پایتون (RegEx)
عبارات با قاعده در برنامه نویسی پایتون (RegEx)
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، شما با عبارات با قاعده در برنامه نویسی پایتون (RegEx) آشنا خواهید شد و از ماژول re پایتون برای کار با RegEx (با کمک مثال ها) استفاده می کنید.
پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون
عبارات با قاعده در برنامه نویسی پایتون RegEx) Regular Expression) یک توالی از کاراکترهاست که الگوی جستجو را تعریف می کند. مثلا،
1 |
^a...s$ |
کد فوق الگوی RegEx را تعریف می کند. الگو این است: هر رشته پنج حرفی که با a شروع می شود و با s پایان می یابد.
الگویی که با استفاده از RegEx تعریف شده است می تواند برای مطابقت با یک رشته استفاده شود.
|
پایتون یک ماژول به نام re برای کار با RegEx دارد. مثالی در اینجا آورده شده است:
1 2 3 4 5 6 7 8 |
pattern = '^a...s$' test_string = 'abyss' result = re.match(pattern, test_string) if result: print("Search successful.") else: print("Search unsuccessful.") |
در اینجا ، ما از تابع ()re.match برای جستجوی الگو در test_string استفاده کردیم. اگر جستجو موفقیت آمیز باشد، این روش یک شی match را برمی گرداند. در غیر این صورت، None
را برمی گرداند.
چندین توابع دیگر نیز برای کار با RegEx در ماژول re تعریف شده است. قبل از بررسی این موضوع، بیایید در مورد عبارات با قاعده خود بدانیم.
مشخص کردن الگو با استفاده از RegEx
برای تعیین عبارات با قاعده، از متا کاراکترها استفاده می شود. در مثال فوق، ^ و $ متا کاراکترها هستند.
متا کاراکترها
متا کاراکترها، کاراکترهایی هستند که توسط موتور RegEx به روشی خاص تفسیر می شوند. در اینجا لیستی از متا کاراکترها موجود است:
[] ^ $ * +؟ {} () \ |
[] – کروشه
کروشه مجموعه ای از کاراکتر هایی را که می خواهید مطابقت داشته باشند را مشخص می کند.
رشته | رشته | Matched? |
[abc] |
a |
1 match |
ac |
2 matches |
|
Hey Jude |
No match |
|
abc de ca |
5 matches |
اگر رشته ای که می خواهید مطابقت دهید حاوی هر یک از a ، b یا c است ، [abc] مطابقت خواهد داشت.
همچنین می توانید طیف وسیعی از کاراکتر ها را با استفاده از کروشه مشخص کنید.
- [a-e] همان [abcde] است.
- [1-4] همان [1234] است.
- [0-39] همان [01239] است.
می توانید کاراکتر تنظیم شده را با استفاده از نماد caret ^ در ابتدای یک کروشه تکمیل کنید (معکوس کنید).
- [^ abc] به معنای هر کاراکتری است به جز a یا b یا c.
[^ 0-9] به معنای هر کاراکتر غیر عددی است.
. – دوره
یک دوره با هر کاراکتر منفرد مطابقت دارد (به جز خط جدید “\ n”).
عبارت | رشته | Matched? |
---|---|---|
.. |
a |
No match |
ac |
1 match | |
acd |
1 match | |
acde |
2 matches (contains 4 characters) |
^
– Caret
از نماد ^caret برای بررسی اینکه آیا یک رشته با یک کاراکتر خاص شروع می شود استفاده می شود.
عبارت | رشته | Matched? |
---|---|---|
^a |
a |
1 match |
abc |
1 match | |
bac |
No match | |
^ab |
abc |
1 match |
acb |
No match (starts with a but not followed by b ) |
$ – دلار
از نماد دلار برای بررسی اینکه رشته ای با یک کاراکتر مشخص به پایان می رسد استفاده می شود.
عبارت | رشته | Matched? |
---|---|---|
a$ |
a |
1 match |
formula |
1 match | |
cab |
No match |
* – ستاره
نماد ستاره * با صفر یا بیشتر از الگوی باقی مانده از آن مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
ma*n |
mn |
1 match |
man |
1 match | |
maaan |
1 match | |
main |
No match (a is not followed by n ) |
|
woman |
1 match |
+ – جمع
نماد جمع + با یک یا چند مورد از الگوی باقی مانده مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
ma+n |
mn |
No match (no a character) |
man |
1 match | |
maaan |
1 match | |
main |
No match (a is not followed by n) | |
woman |
1 match |
؟ – علامت سوال
نماد علامت سوال ؟ با صفر یا یک الگوی باقی مانده مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
ma?n |
mn |
1 match |
man |
1 match | |
maaan |
No match (more than one a character) |
|
main |
No match (a is not followed by n) | |
woman |
1 match |
{} – آکولاد
این کد را در نظر بگیرید: {n، m}. این به معنای حداقل n و حداکثر m تکرار الگویی است که برای آن باقی مانده است.
عبارت | رشته | Matched? |
---|---|---|
a{2,3} |
abc dat |
No match |
abc daat |
1 match (at daat ) |
|
aabc daaat |
2 matches (at aabc and daaat ) |
|
aabc daaaat |
2 matches (at aabc and daaaat ) |
بیایید یک مثال دیگر را امتحان کنیم. این {RegEx [0-9] {2، 4 حداقل با 2 رقم مطابقت دارد اما بیشتر از 4 رقم نیست.
عبارت | رشته | Matched? |
---|---|---|
[0-9]{2,4} |
ab123csde |
1 match (match at ab123csde ) |
12 and 345673 |
3 matches (12 , 3456 , 73 ) |
|
1 and 2 |
No match |
| – تناوب
میله عمودی | برای تناوب استفاده می شود.
عبارت | رشته | Matched? |
---|---|---|
a|b |
cde |
No match |
ade |
1 match (match at ade ) |
|
acdbea |
3 matches (at acdbea ) |
در اینجا ، a | b با هر رشته ای که شامل a یا b باشد مطابقت دارد.
() – گروه
از پرانتز () برای گروه بندی الگوهای فرعی استفاده می شود. به عنوان مثال ، a | b | c) xz) با هر رشته ای مطابقت دارد که با a یا b یا c و پس از آن xz مطابقت داشته باشد
عبارت | رشته | Matched? |
---|---|---|
(a|b|c)xz |
ab xz |
No match |
abxz |
1 match (match at abxz ) |
|
axz cabxz |
2 matches (at axzbc cabxz ) |
\ – بک اسلش
Backlash \ برای فرار از کاراکترهای مختلف از جمله همه کاراکترهای متا استفاده می شود. مثلا،
اگر رشته ای شامل $ به دنبال آن باشد، \ $ مطابقت دارد. در اینجا ، $ توسط موتور RegEx به روشی خاص تفسیر نمی شود.
اگر مطمئن نیستید که یک کاراکتر معنی خاصی دارد یا نه، می توانید بک اسلش را مقابل آن قرار دهید. این باعث می شود که با کاراکتر به روشی خاص برخورد نشود.
توالی های خاص
توالی های خاص نوشتن الگوهای معمول را آسان می کند. در اینجا لیستی از توالی های خاص وجود دارد:
A\ – اگر کاراکتر های مشخص شده در ابتدای یک رشته قرار بگیرند، مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
\Athe |
the sun |
Match |
In the sun |
No match |
b\ – در صورتی که کاراکتر های مشخص شده در ابتدا یا انتهای کلمه باشند، مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
\bfoo |
football |
Match |
a football |
Match | |
afootball |
No match | |
foo\b |
the foo |
Match |
the afoo test |
Match | |
the afootest |
No match |
B\ – مقابل b \. در صورتی که کاراکتر های مشخص شده در ابتدا یا انتهای کلمه نباشند، مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
\Bfoo |
football |
No match |
a football |
No match | |
afootball |
Match | |
foo\B |
the foo |
No match |
the afoo test |
No match | |
the afootest |
Match |
d\ – با هر رقم اعشاری مطابقت دارد. معادل [0-9]
عبارت | رشته | Matched? |
---|---|---|
\d |
12abc3 |
3 matches (at 12abc3 ) |
Python |
No match |
D \- با هر عدد غیر اعشاری مطابقت دارد. معادل [^ 0-9]
عبارت | رشته | Matched? |
---|---|---|
\D |
1ab34"50 |
3 matches (at 1ab34"50 ) |
1345 |
No match |
s \- مواردی که یک رشته شامل هر کاراکتر فضای خالی است. معادل [\ t \ n \ r \ f \ v].
عبارت | رشته | Matched? |
---|---|---|
\s |
Python RegEx |
1 match |
PythonRegEx |
No match |
S \ – مواردی که یک رشته شامل هر کاراکتر غیر فضای خالی است. معادل [^ \ t \ n \ r \ f \ v].
عبارت | رشته | Matched? |
---|---|---|
\S |
a b |
2 matches (at a b ) |
|
No match |
w \- با هر حرف الفبایی (رقم و حروف) مطابقت دارد. معادل [a-zA-Z0-9_]. به هر حال، زیرخط _ نیز یک کاراکتر عددی است.
عبارت | رشته | Matched? |
---|---|---|
\w |
12&": ;c |
3 matches (at 12&": ;c ) |
%"> ! |
No match |
W\ – با هر کاراکتر غیر الفبایی مطابقت دارد. معادل [^ a-zA-Z0-9_]
عبارت | رشته | Matched? |
---|---|---|
\W |
1a2%c |
1 match (at 1a2%c ) |
Python |
No match |
Z\ – در صورتی که کاراکتر های مشخص شده در انتهای یک رشته قرار داشته باشند، مطابقت دارد.
عبارت | رشته | Matched? |
---|---|---|
Python\Z |
I like Python |
1 match |
I like Python Programming |
No match | |
Python is fun. |
No match |
نکته: برای ساخت و آزمایش عبارات با قاعده، می توانید از ابزارهای تست RegEx مانند regex101 استفاده کنید. این ابزار نه تنها به شما در ایجاد عبارات با قاعده کمک می کند ، بلکه به شما در یادگیری آن نیز کمک می کند.
اکنون اصول RegEx را فهمیدید ، بیایید نحوه استفاده از RegEx را در کد پایتون خود بحث کنیم.
پایتون RegEx
پایتون یک ماژول به نام re برای کار با عبارات باقاعده دارد. برای استفاده از آن، ماژول را باید وارد کنیم.
1 |
import re |
ماژول چندین تابع و ثابت را برای کار با RegEx تعریف می کند.
()re.findall
متد () re.findall لیستی از رشته ها را که شامل همه موارد منطبق است برمی گرداند.
مثال 1: ()re.findall
1 2 3 4 5 6 7 8 9 10 11 |
# Program to extract numbers from a string import re string = 'hello 12 hi 89. Howdy 34' pattern = '\d+' result = re.findall(pattern, string) print(result) # Output: ['12', '89', '34'] |
اگر الگوی پیدا نشد، ()re.findall لیست خالی را برمی گرداند.
()re.split
متدre.split رشته ها را در جایی که تطبیق دارد تقسیم می کند و لیستی از رشته هایی را که تقسیمات در آنها رخ داده است را برمی گرداند.
مثال 2: ()re.split
1 2 3 4 5 6 7 8 9 |
import re string = 'Twelve:12 Eighty nine:89.' pattern = '\d+' result = re.split(pattern, string) print(result) # Output: ['Twelve:', ' Eighty nine:', '.'] |
اگر الگو پیدا نشد، ()re.split لیستی را که شامل رشته اصلی است برمی گرداند.
می توانید آرگومان maxsplit را به متد () re.split منتقل کنید. این حداکثر تعداد تقسیم های است که رخ خواهد داد.
1 2 3 4 5 6 7 8 9 10 11 |
import re string = 'Twelve:12 Eighty nine:89 Nine:9.' pattern = '\d+' # maxsplit = 1 # split only at the first occurrence result = re.split(pattern, string, 1) print(result) # Output: ['Twelve:', ' Eighty nine:89 Nine:9.'] |
ضمناً ، مقدار پیش فرض maxsplit برابر 0 است. یعنی همه تقسیم های احتمالی که وجود دارد.
()re.sub
نحو ()re.sub به شرح زیر است:
1 |
re.sub(pattern, replace, string) |
این متد رشته ای را برمی گرداند که در آن وقایع همسان با محتوای متغیر جایگزین می شوند.
مثال 3: ()re.sub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Program to remove all whitespaces import re # multiline string string = 'abc 12\ de 23 \n f45 6' # matches all whitespace characters pattern = '\s+' # empty string replace = '' new_string = re.sub(pattern, replace, string) print(new_string) # Output: abc12de23f456 |
اگر الگوی پیدا نشد، ()re.sub رشته اصلی را برمی گرداند.
می توانید count را به عنوان پارامتر چهارم به متد () re.sub منتقل کنید. اگر حذف شود، به 0 می رسد. این جایگزین همه موارد می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re # multiline string string = 'abc 12\ de 23 \n f45 6' # matches all whitespace characters pattern = '\s+' replace = '' new_string = re.sub(r'\s+', replace, string, 1) print(new_string) # Output: # abc12de 23 # f45 6 |
()re.subn
()re.subn مشابه () re.sub است انتظار می رود یک گروه 2 تایی شامل رشته جدید و تعداد تعویض های انجام شده را برگرداند.
مثال 4: ()re.subn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Program to remove all whitespaces import re # multiline string string = 'abc 12\ de 23 \n f45 6' # matches all whitespace characters pattern = '\s+' # empty string replace = '' new_string = re.subn(pattern, replace, string) print(new_string) # Output: ('abc12de23f456', 4) |
()re.search
متد ()re.search دو آرگومان می گیرد: یک الگو و یک رشته. این متد به دنبال اولین مکانی است که الگوی RegEx با رشته مطابقت دارد.
اگر جستجو موفقیت آمیز باشد، ()re.search یک شی match را برمی گرداند. در غیر این صورت، None را بر نمی گردد.
1 |
match = re.search(pattern, str) |
مثال 5: ()re.search
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import re string = "Python is fun" # check if 'Python' is at the beginning match = re.search('\APython', string) if match: print("pattern found inside the string") else: print("pattern not found") # Output: pattern found inside the string |
Match object
با استفاده از تابع ()dir می توانید متدها و ویژگی های یک Match object را بدست آورید.
برخی از روشها و ویژگیهای متداول Match object منطبق عبارتند از:
()match.group
متد ()group بخشی از رشته را در جایی که مطابقت دارد برمی گرداند.
مثال 6: Match object
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re string = '39801 356, 2102 1111' # Three digit number followed by space followed by two digit number pattern = '(\d{3}) (\d{2})' # match variable contains a Match object. match = re.search(pattern, string) if match: print(match.group()) else: print("pattern not found") # Output: 801 35 |
در اینجا ، متغیر مطابقت شامل یک Match object است.
الگوی ما (\ d {3}) (\ d {2}) دارای دو زیر گروه (\ d {3}) و (\ d {2}) است. می توانید بخشی از رشته این زیرگروههای پرانتزی را بدست آورید. نحوه کار:
1 2 3 4 5 6 7 8 9 10 |
>>> match.group(1) '801' >>> match.group(2) '35' >>> match.group(1, 2) ('801', '35') >>> match.groups() ('801', '35') |
()match.start () ، match.end () و match.span
تابع ()start اندیس شروع زیر رشته همسان را برمی گرداند. به همین ترتیب، ()end شاخص انتهایی زیر رشته همسان را برمی گرداند.
1 2 3 4 |
>>> match.start() 2 >>> match.end() 8 |
تابع()span یک تاپل شامل اندیس شروع و پایان قسمت همسان را برمی گرداند.
1 2 |
>>> match.span() (2, 8) |
match.re و match.string
ویژگی re یک Match object، یک عبارت بیان منظم را برمی گرداند. به همین ترتیب، ویژگی string رشته عبور داده شده را برمی گرداند.
1 2 3 4 5 |
>>> match.re re.compile('(\\d{3}) (\\d{2})') >>> match.string '39801 356, 2102 1111' |
استفاده از پیشوند r قبل از RegEx
وقتی پیشوند r یا R قبل از یک عبارت با قاعده استفاده می شود ، این به معنی رشته خام است. به عنوان مثال ، ‘\ n’ یک خط جدید است در حالی که r ‘\ n’ به معنای دو کاراکتر است: یک بک اسلش \ به دنبال n.
Backlash \ برای فرار از کاراکترهای مختلف از جمله همه کاراکترهای متا استفاده می شود. با این حال، استفاده از پیشوند r باعث می شود \ به عنوان یک کاراکتر معمولی رفتار کند.
مثال 7: رشته خام با استفاده از پیشوند r
1 2 3 4 5 6 7 8 |
import re string = '\n and \r are escape sequences.' result = re.findall(r'[\n\r]', string) print(result) # Output: ['\n', '\r'] |
لیست جلسات قبل آموزش برنامه نویسی پایتون
- آموزش نصب و اجرای برنامه نویسی پایتون
- کلیدواژه ها و شناسه های برنامه نویسی پایتون
- دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
- متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون
- انواع داده ها در برنامه نویسی پایتون
- تبدیل نوع در برنامه نویسی پایتون
- ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
- عملگرها در برنامه نویسی پایتون
- نام و دامنه در برنامه نویسی پایتون
- دستور شرطی if…else در برنامه نویسی پایتون
- حلقه for در برنامه نویسی پایتون
- حلقه while در برنامه نویسی پایتون
- دستورات break و continue در برنامه نویسی پایتون
- دستور pass در برنامه نویسی پایتون
- توابع در برنامه نویسی پایتون
- آرگومان تابع در برنامه نویسی پایتون
- تابع بازگشتی در برنامه نویسی پایتون
- تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
- متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
- کلیدواژه global در برنامه نویسی پایتون
- ماژول های برنامه نویسی پایتون
- پکیج ها در برنامه نویسی پایتون
- اعداد و تبدیل نوع داده در برنامه نویسی پایتون
- لیست در برنامه نویسی پایتون
- تاپل در برنامه نویسی پایتون
- رشته ها در برنامه نویسی پایتون
- مجموعه ها در برنامه نویسی پایتون
- دیکشنری در برنامه نویسی پایتون
- عملیات ورودی/خروجی در برنامه نویسی پایتون
- دایرکتوری و مدیریت فایل ها در برنامه نویسی پایتون
- خطاها و استثناهای توکار در برنامه نویسی پایتون
- مدیریت استثناها در برنامه نویسی پایتون
- استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون
- برنامه نویسی شی گرا در پایتون
- اشیا و کلاس ها در برنامه نویسی پایتون
- وراثت در برنامه نویسی پایتون
- وراثت چندگانه در برنامه نویسی پایتون
- سربارگذاری عملگرها در برنامه نویسی پایتون
- تکرار کننده ها در برنامه نویسی پایتون
- Generator در برنامه نویسی پایتون
- بستار در برنامه نویسی پایتون
- دکوراتور در برنامه نویسی پایتون
- دکوراتور property در برنامه نویسی پایتون
دیدگاه شما