دوره ویژه مقدماتی پایتون – Telegram
دوره ویژه مقدماتی پایتون
435 subscribers
248 photos
4 videos
250 links
Download Telegram
✍️regular expression

برای دستیابی به این روش لازم است که از ماژول re موجود در کتابخانه استاندارد پایتون استفاده کنید. بعد از اینکه شما regular expression را تعریف کردید، می توانید از تابع re.match برای بررسی اینکه رشته ی وارد شده با ابتدای الگوی مورد بررسی مطابقت دارد یا نه، استفاده کنید. اگر مطابقت داشت، یک شی که نشان دهنده ی تطابق است را بازمیگرداند، در غیر این صورت none را باز می گرداند.
برای اینکه از در زمان کار با regular expression ها دچار مشکل نشویم از رشته ی r"expression" استفاده می کنیم.

مثال :

import re
pattern = r"spam"

if re.match(pattern,"spamspamspam"):
print("match")
else :
print("no match")

خروجی :
>>>
match
>>>

📌کد بالا بررسی می کند که آیا رشته ی ورودی با الگوی "spam" مطابقت دارد یا نه. اگر مطابقت داشته باشد match را چاپ می کند.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 172 : کدام یک از رشته های زیر با الگوی "spamspamspam" مطابقت ندارد؟

1️⃣: sp
️|||||10%(1)
2️⃣: spamspam
️|||||10%(1)
3️⃣: pamspam
️||||||||||||||||||||||||||||||||||||||||80%(8)

👥: 10شرکت در نظر سنجی
✍️regular expression

توابع دیگر که برای بررسی تطابق با الگو ها استفاده می شوند re.search و re.findall هستند.
تابع re.search همه ی رشته را بررسی می کند و اگر قسمتی از رشته مطابقت داشت آن را پیدا می کند.
تابع re.findall یک لیست بر می گرداند که همه ی زیر رشته هایی را نشان می دهد که با الگوی ما تطابق دارند.

مثال:
import re
pattern = r"Spam"

if re.match(pattern, "eggspamsausagespam"):
print("match")
else :
print("no match")

if re.search(pattern, "eggspamsausagespam"):
print("match")
else :
print("no match")

print(re.findall(pattern, "eggspamsausagespam"))

خروجی :
»>
no match
match
{'spam', 'spam']
»>

📌در مثال بالا، تابع match زمانی که ابتدای رشته را بررسی می کند، با الگوی ما تطابق ندارد. اما تابع Search یک تطابق در رشته پیدا می کند.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 173 : کدام یک از موارد زیر جزو توابع ماژول re نیستند؟

1️⃣: Search
️0%(0)
2️⃣: findall
️0%(0)
3️⃣: findlist
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(8)

👥: 8شرکت در نظر سنجی
✍️regular expression

متد group رشته ی تطابق یافته را باز می گرداند، متد های start و end که مکان ابتدا و انتهای اولین رشته ی تطابق یافته را باز می گرداند، و متد span مکان ابتدا و انتهای اولین مورد تطابق یافته را در فرمت یک تاپل بر می گرداند.

مثال :
import re
pattern = r"pam"

match = re.search(pattern, "eggspamsausage")
if match:
print(match.group())
print(match.start())
print(match.end())
print(match.span())

خروجی :
»>
pam
4
7
(4,7)
»>

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
✍️جست جو و جایگزینی

یکی از مهمترین متد های re تابع sub است که با فرمت زیر استفاده می شود:
re.sub(pattern, repl, string, max = 0)

این متد همه ی pattern هایی را که با رشته ی rpl تطابق دارد را با مقدار rpl جایگزین می کند و رشته ی تغییر یافته را باز می گرداند.

مثال :
import re

str = "my name is David. Hi David."
pattern = r"David"
newstr = re.sub(pattern, "Amy", str)
print(newstr)

خروجی :
»>
my name is Amy. Hi Amy.
»>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 174 : جاهای خالی زیر را طوری پر کنید که همه ی 9 ها را با 0 جایگزاری کند.

import ...

num = "07987549836"
pattern = r"9"
num = re. ... (pattern, " ...", ...._
print(num)

1️⃣: re - sub - 0 - str
️|||||||||||||||||||38%(3)
2️⃣: import - sub - 9 - num
️0%(0)
3️⃣: re - sub - 0 - num
️|||||||||||||||||||||||||||||||63%(5)

👥: 8شرکت در نظر سنجی
✍️metacharacters

برای قدرتمند تر کردن Regular expression ها از metachararcter ها استفاده می کنیم.
اولین metacharacterی که به بررسی آن می پردازیم، . (dot) است. در رشته ها به جای dot هر چیزی میتواند قرار بگیرد.

مثال :
import re

pattern = r"gr.y"

if re.match(pattern, "grey"):
print ("match 1")
if re.match(pattern, "gray"):
print("match 2")
if re.match(pattern, "blue"):
print("match 3")

خروجی :
»>
match 1
match 2
»>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 175 : چه چیزی با عبارت "..." تطابق دارد؟

1️⃣: هر رشته ای که دارای 3 نقطه باشد
️|||||10%(1)
2️⃣: هر رشته ای با 3 حرف
️|||||||||||||||||||||||||||||||||||||||||||||90%(9)

👥: 10شرکت در نظر سنجی
✍️metacharacter

نشانه های ^ و $ دیگر metacharacter های ما هستند.
اینها ابتدا و انتهای رشته را بررسی می کنند.

مثال :
import re

pattern = r"^gr.y$"

if re.match(pattern, "grey"):
print("match 1")
if re.match(pattern, "gray"):
print("match 2")
if re.match(pattern, "stingray"):
print("match 3")

خروجی :
»>
match 1
match 2
»>

📌الگوی "^gr.y$" یعنی اینکه رشته باید با gr شروع شود و با هر کاراکتری ادامه پیدا کند، البته نه خط جدید، و با حرف y پایان یابد.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 176 : جای خالی را طوری پر کنید که یک الگو را ایجاد کند که با هر رشته ی 3 حرفی که آخرین حرف آن ! باشد، تطابق داشته باشد.
r" ... $"

1️⃣: .......!
️0%(0)
2️⃣: ..\!
️0%(0)
3️⃣: ..!
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(8)

👥: 8شرکت در نظر سنجی
✍️groups

یک گروه می تواند با قرار دادن پرانتز در اطراف Reglar expression ها ساخته شود. این یعنی اینکه یک گروه می تواند به عنوان ورودی به metacharacter ها داده شود.

مثال :
import re
pattern = r"egg(spam)*"

if re.match(pattern, "egg"):
print("match 1")
if re.match (pattern, "eggspamspamspamegg"):
print("match 2")
if re.match(pattern, "spam"):
print("match 3")

خروجی :
»>
match 1
match 2
»>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 177 : عبارت زیر چه چیزی را نشان میدهد؟
([^aeiou][aeiou][^aeiou])+

1️⃣: هیچ چیزی
️0%(0)
2️⃣: تکرار aeiou به تعداد 3 بار
️0%(0)
3️⃣: یک یا بیشتر تکرار از حروف بی صدا، صدا دار و بی صدا
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(7)

👥: 7شرکت در نظر سنجی
✍️groups

برای نشان دادن محتوای group میتوان از تابع group استفاده کرد. میتوانید (group(0 یا ()group را فراخوانی کنید. فراخوانی (group(n در جایی که n بزرگتر از 0 باشد، nمین عضو group را باز می گرداند. متد ()groups همه ی اعضای بعد از 1 را بر میگرداند.

مثال :
import re

pattern = r"a(bc)(de)(f(g)h)i"
match = re.match(pattern, "abcdefghijklmnop")
if match:
print(match.group())
print(match.group(0))
print(match.group(1))
print(match.group(2))
print(match.groups())

خروجی :
»>
abcdefghi
abcdefghi
bc
de
('bc', 'de', 'fgh', 'g')
»>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 178 : group(3 در الگوی زیر کدام یک از گزینه های زیر می تواند باشد؟
1(23)(4(56)78)9(0)

1️⃣: 0
️0%(0)
2️⃣: 23
️0%(0)
3️⃣: 56
️||||||||||||||||||||40%(2)
4️⃣: 45678
️||||||||||||||||||||||||||||||60%(3)

👥: 5شرکت در نظر سنجی
✍️groups

انواع مختلفی از group ها وجود دارد که دو نوع کارآمد آن named groups و non-capturing groups هستند.
نوع name groups دارای فرمت زیر هستند:
?P<name>...
که name، نام گروه و ... محتوای آن است. عملکرد این group مانند group های معمولی است با این تفاوت که می توان به آن با استفاده از name هم دسترسی پیدا کرد.
نوع non-capturing groups دارای فرمت زیر هستند :
? : ...
این نوع با متد group قابل دسترس نیست، بنابراین می توانند به یک regular expression موجود اضافه شوند بدون اینکه شماره دهی آن را بشکنند.

مثال :
import re

pattern = r"(?P<first>abc)(?:def)(ghi)"
match = re.match (pattern, "abcdefghi")
if match:
print(match.group("first"))
print(match.groups())

خروجی :
»>
abc
('abc', 'ghi')
»>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 179 : خروجی کد زیر چه چیزی خواهد بود؟
len(match.groups()) of a match of (a)(b(?:c)(d)(?:e))

1️⃣: 3
️||||||||||||||||||||||||||||||||||||||||80%(4)
2️⃣: 4
️0%(0)
3️⃣: 5
️||||||||||20%(1)
4️⃣: 6
️0%(0)

👥: 5شرکت در نظر سنجی
✍️metacharacter

یکی از مهمترین metacharacter ها | است. که به معنی or است که red|blue با الگوی red یا blue تطابق دارد.

مثال :
import re
pattern = r"gr(a|e)y"
match = re.match(pattern, "gray")
if match :
print ("match 1")
match = re.match(pattern, "grey")
if match:
print ("match 2")
match = re.match(pattern, "griy")
if match:
print("match 3")

خروجی :
»>
match 1
match 2
»>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 180 : کدام یک از موارد زیر با بقیه یکسان نیست؟

1️⃣: (1|2|3|4|5)
️|||||||||||||||||||||||||||||||||||||||||||86%(6)
2️⃣: [1-6]
️0%(0)
3️⃣: [12345]
️|||||||14%(1)

👥: 7شرکت در نظر سنجی
✍️دنباله های خاص

انواع مختلفی از دنباله های خاص وجود دارند که می توانند در Regular expression ها استفاده شوند. که به این صورت نوشته می شوند که یک \ گزاشته میشود و بعد آن کاراکتر می آید.
یک دنباله بسیار پرکاربرد در دنباله های خاص، \هایی هستند که با یک عدد همراه می شوند، مثل 1\ یا 17\.

مثال :
import re

pattern = r"(.+) \1"

match = re.match(pattern, "wprd word")
if match :
print("match 1")
match = re.match(pattern, "?! ?!")
if match:
print("match 2")
match = re.match(pattern, "abc cde")
if match:
print("match 3")

خروجی :
»>
match 1
match 2
»>

📌در نظر داشته باشید که 1\(+.)" مانند "(+.)(+.)" نیست. چون 1\ به اولین گروه اشاره می کند.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 181 : عبارت 1\(xyz|abc) با کدام یک از عبارات زیر تطابق دارد؟

1️⃣: "abc" or "xyz" که با همین دنباله ادامه پیدا می کنند
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(7)
2️⃣: "abc" then "xyz"
️0%(0)
3️⃣: "abc" or "xyz" then a "1"
️0%(0)

👥: 7شرکت در نظر سنجی