Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion donate-report.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

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

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

----

Expand All @@ -24,6 +24,16 @@






.. raw:: html

<p id="e66635" >49: <strong style="color:#5C6BC0">150,000 تومان</strong> در زمان 13:30 04-12-1399<br><q>خیلی واضح و عالی مطالب را عنوان کردید واقعا ممنونم</q></p>

----


.. raw:: html

<p id="17e37d" >48: <strong style="color:#5C6BC0">100,000 تومان</strong> در زمان 09:03 02-12-1399<br><q>عالی بود</q></p>
Expand Down
1 change: 1 addition & 0 deletions index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
lessons/l13
lessons/l14
lessons/l15
lessons/l16
log
donate-report
python-interactive
Expand Down
78 changes: 78 additions & 0 deletions lessons/l15.rst
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,18 @@
[`regex101@ تست آنلاین <https://regex101.com/r/IIc4Fh/17>`__]


.. tip::
این کاراکتر (``b\``) در مبحث RegEx به عنوان انطباق‌گر یک word(``\w``) boundary نیز خوانده می‌شود. word boundary (مرز واژه) به سه موقعیت گفته میشود:

* قبل از نخستین کاراکتر، زمانی که کاراکتر نخست یکی از کاراکترهای شامل ``w\`` باشد
* بعد از کاراکتر پایانی، زمانی که کاراکتر پایانی یکی از کاراکترهای شامل ``w\`` باشد
* بین دو کاراکتر، زمانی که یکی از این دو کارامتر شامل ``w\`` باشد ولی دیگری خیر

[`regex101@ تست آنلاین <https://regex101.com/r/48XLbY/1>`__] در این نمونه کد، نقاط word boundary مشخص شده است

در ادمه کارکتر ``w\`` شرح داده خواهد شد.


* ``B\``

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

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

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


* ``d\``

Expand Down Expand Up @@ -521,6 +536,32 @@



انطباق با طول صفر (Zero-length Match)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

یک عبارت 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‌ها ارايه شده است::

\b
\B
\A
\B
^
$
.*
\d*

سعی کنید برای الگوهای بالا در regex101.com، متن‌هایی را مثال بزنید، تست کنید و نتایج را با دقت مشاهده نمایید، به عنوان مثالی دیگر الگو زیر را در نظر بگیرید - این مورد را با هم بررسی می‌کنیم::

p*

حاصل انطباق این الگو برای متنی مانند ``1,2`` هیچ فرق با الگو ``b\`` (که پیش‌تر صحبت شد) ندارد - تا اینجا فهمیدیم که از دید RegEx متن تنها همان کاراکترهای قابل دید نیست بلکه نقاطی مثل قبل از کاراکتر نخست، بعد از کاراکتر پایانی و حتی گاهی بین دو کاراکتر را نیز در نظر می‌گیرد و همچنین می‌دانیم که این الگو به دنبال هیچ یا هربار تکرار کاراکتر ``p`` در متن است. در نتیجه نقاطی که شامل هیچ کاراکتری نباشد یا شامل کاراکتر ``p`` باشد تطبیق پیدا می‌کند و از آنجایی که متن مورد نظر شامل ``p`` نمی‌باشد، تنها موقعیت‌های Zero-length باقی می‌ماند! - این الگو برای متن یاد شده کاملا یک Zero-length Match است.

[`regex101@ تست آنلاین <https://regex101.com/r/OQrGDE/1>`__] (p در این الگو تنها یک کاراکتر متنی است - کاراکترهای دیگر را نیز خودتان تست کنید)






ماژول re پایتون
-----------------
Expand Down Expand Up @@ -685,6 +726,39 @@
NO


* پرانتزگذاری غیرقابل پیگیری (non-capturing): ``(...:?)``

این ساختار نمایش پرانتزگذاری یا همان گروه‌بندی معمولی در بحث RegEx است ولی با این تفاوت که نتایج انطباق داخل پرانتز قابل بازیابی (همانند یک گروه معمولی) نخواهد بود::

>>> import re

>>> string = "Python@1991"
>>> pattern = "(\d+)"
>>> match = re.search(pattern, string)

>>> match
<re.Match object; span=(7, 11), match='1991'>

>>> match.group(1)
'1991'

::

>>> import re

>>> string = "Python@1991"
>>> pattern = "(?:\d+)"
>>> match = re.search(pattern, string)

>>> match
<re.Match object; span=(7, 11), match='1991'>

>>> match.group(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group


* گروه بانام (Named Group): ``(...<P<name?)``

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


.. note::

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


|

Expand Down
Loading