Skip to content

Commit b4dea91

Browse files
author
Saeid Darvish
authored
Merge pull request #15 from saeiddrv/draft
ADD L16
2 parents e239ac8 + 77e19a5 commit b4dea91

5 files changed

Lines changed: 897 additions & 1 deletion

File tree

donate-report.rst

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
مبالغ مهم نیستند، از اقدام و پیام تشویق شما دوستان بسیار سپاسگذارم. (*اطلاعات این صفحه به صورت آنی بروز نمی‌شود!*)
1313

14-
**از ابتدا (1395): 1,721,222 تومان**
14+
**از ابتدا (1394): 1,871,222 تومان** [آخرین بروزرسانی:‌ 08-12-1399]
1515

1616
----
1717

@@ -24,6 +24,16 @@
2424
2525

2626

27+
28+
29+
30+
.. raw:: html
31+
32+
<p id="e66635" >49: <strong style="color:#5C6BC0">150,000 تومان</strong> در زمان 13:30 04-12-1399<br><q>خیلی واضح و عالی مطالب را عنوان کردید واقعا ممنونم</q></p>
33+
34+
----
35+
36+
2737
.. raw:: html
2838

2939
<p id="17e37d" >48: <strong style="color:#5C6BC0">100,000 تومان</strong> در زمان 09:03 02-12-1399<br><q>عالی بود</q></p>

index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
lessons/l13
3131
lessons/l14
3232
lessons/l15
33+
lessons/l16
3334
log
3435
donate-report
3536
python-interactive

lessons/l15.rst

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,18 @@
372372
[`regex101@ تست آنلاین <https://regex101.com/r/IIc4Fh/17>`__]
373373

374374

375+
.. tip::
376+
این کاراکتر (``b\``) در مبحث RegEx به عنوان انطباق‌گر یک word(``\w``) boundary نیز خوانده می‌شود. word boundary (مرز واژه) به سه موقعیت گفته میشود:
377+
378+
* قبل از نخستین کاراکتر، زمانی که کاراکتر نخست یکی از کاراکترهای شامل ``w\`` باشد
379+
* بعد از کاراکتر پایانی، زمانی که کاراکتر پایانی یکی از کاراکترهای شامل ``w\`` باشد
380+
* بین دو کاراکتر، زمانی که یکی از این دو کارامتر شامل ``w\`` باشد ولی دیگری خیر
381+
382+
[`regex101@ تست آنلاین <https://regex101.com/r/48XLbY/1>`__] در این نمونه کد، نقاط word boundary مشخص شده است
383+
384+
در ادمه کارکتر ``w\`` شرح داده خواهد شد.
385+
386+
375387
* ``B\``
376388

377389
برعکس ``b\``، بر حسب موقعیت قرار گرفتن، شروع یا پایان **نیافتن** یک **کلمه** را مشخص می‌کند. یعنی کلماتی را تطبیق می‌دهد که با کاراکتر یا کارکترهایی مشخصی شروع یا پایان نیافته باشند.
@@ -397,6 +409,9 @@
397409

398410
[`regex101@ تست آنلاین <https://regex101.com/r/IIc4Fh/19>`__]
399411

412+
.. tip::
413+
این کاراکتر (``B\``) در تضاد با ``b\`` به عنوان انطباق‌گر نقاطی که word(``\w``) boundary **نیستند**، نیز خوانده می‌شود. [`regex101@ تست آنلاین <https://regex101.com/r/M3f3VN/1>`__]
414+
400415

401416
* ``d\``
402417

@@ -521,6 +536,32 @@
521536

522537

523538

539+
انطباق با طول صفر (Zero-length Match)
540+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
541+
542+
یک عبارت Zero-length به عبارتی از مبحث RegEx گفته می‌شود که هیچ کاراکتری را انطباق نمی‌دهد بلکه تنها موقعیت‌هایی را در متن رشته مورد نظر تطبیق می‌دهد. برای نمونه متن رشته ``1,2`` را درنظر بگیرید، الگو ``b\`` تنها موقعیت‌های قبل از ``1``، بین ``1`` و ``,``، بین ``,`` و ``2`` و بعد از ``2`` را تطبیق می‌دهد؛ در نتیجه الگو ``b\`` برای این متن یک Zero-length Match است. [به نتایج دقت کنید: `regex101@ تست آنلاین <https://regex101.com/r/BCuLmh/1>`__] . Zero-length Match در RegEx بسیار گمراه کننده هستند و می‌بایست با دقت از آن‌ها استفاده کرد. در زیر چند نمونه الگو از Zero-length Match‌ها ارايه شده است::
543+
544+
\b
545+
\B
546+
\A
547+
\B
548+
^
549+
$
550+
.*
551+
\d*
552+
553+
سعی کنید برای الگوهای بالا در regex101.com، متن‌هایی را مثال بزنید، تست کنید و نتایج را با دقت مشاهده نمایید، به عنوان مثالی دیگر الگو زیر را در نظر بگیرید - این مورد را با هم بررسی می‌کنیم::
554+
555+
p*
556+
557+
حاصل انطباق این الگو برای متنی مانند ``1,2`` هیچ فرق با الگو ``b\`` (که پیش‌تر صحبت شد) ندارد - تا اینجا فهمیدیم که از دید RegEx متن تنها همان کاراکترهای قابل دید نیست بلکه نقاطی مثل قبل از کاراکتر نخست، بعد از کاراکتر پایانی و حتی گاهی بین دو کاراکتر را نیز در نظر می‌گیرد و همچنین می‌دانیم که این الگو به دنبال هیچ یا هربار تکرار کاراکتر ``p`` در متن است. در نتیجه نقاطی که شامل هیچ کاراکتری نباشد یا شامل کاراکتر ``p`` باشد تطبیق پیدا می‌کند و از آنجایی که متن مورد نظر شامل ``p`` نمی‌باشد، تنها موقعیت‌های Zero-length باقی می‌ماند! - این الگو برای متن یاد شده کاملا یک Zero-length Match است.
558+
559+
[`regex101@ تست آنلاین <https://regex101.com/r/OQrGDE/1>`__] (p در این الگو تنها یک کاراکتر متنی است - کاراکترهای دیگر را نیز خودتان تست کنید)
560+
561+
562+
563+
564+
524565

525566
ماژول re پایتون
526567
-----------------
@@ -685,6 +726,39 @@
685726
NO
686727

687728

729+
* پرانتزگذاری غیرقابل پیگیری (non-capturing): ``(...:?)``
730+
731+
این ساختار نمایش پرانتزگذاری یا همان گروه‌بندی معمولی در بحث RegEx است ولی با این تفاوت که نتایج انطباق داخل پرانتز قابل بازیابی (همانند یک گروه معمولی) نخواهد بود::
732+
733+
>>> import re
734+
735+
>>> string = "Python@1991"
736+
>>> pattern = "(\d+)"
737+
>>> match = re.search(pattern, string)
738+
739+
>>> match
740+
<re.Match object; span=(7, 11), match='1991'>
741+
742+
>>> match.group(1)
743+
'1991'
744+
745+
::
746+
747+
>>> import re
748+
749+
>>> string = "Python@1991"
750+
>>> pattern = "(?:\d+)"
751+
>>> match = re.search(pattern, string)
752+
753+
>>> match
754+
<re.Match object; span=(7, 11), match='1991'>
755+
756+
>>> match.group(1)
757+
Traceback (most recent call last):
758+
File "<stdin>", line 1, in <module>
759+
IndexError: no such group
760+
761+
688762
* گروه بانام (Named Group): ``(...<P<name?)``
689763

690764
این ساختار نمایش همان گروه‌بندی عادی در بحث RegEx است با این تفاوت که می‌توان به هر گروه یک نام انتساب داد. به کمک ماژول re پایتون، همانطوری که در درس بعدی به صورت کامل خواهید دید، حاصل انطباق هر گروه موجود در الگو با متن مورد نظر از طریق یک اندیس عددی که به ترتیب از یک شروع می‌شود قابل دسترسی است، با استفاده از این ساختار می‌توان حاصل انطباق را بسیار خواناتر و تنها با استفاده از نام آن دستیابی نمود::
@@ -836,6 +910,10 @@
836910
YES
837911

838912

913+
.. note::
914+
915+
قالب‌های Lookahead یا Lookbehind (در کل lookaround‌ها) را نیز می‌توان از نوع Zero-Lengthها در نظر گرفت تنها تفاوت آن‌ها با الگوهایی که پیش‌تر بیان شد این است که lookaround‌ها ابتدا کاراکتر(هایی) را تطبیق و سپس از آن(ها) گذر می‌کنند.
916+
839917

840918
|
841919

0 commit comments

Comments
 (0)