|
589 | 589 |
|
590 | 590 | ``sub(pattern, repl, string, count=0, flags=0)`` |
591 | 591 |
|
| 592 | +این تابع (``sub``) حاصل انطباقهای ممکن pattern در string را در repl جایگذاری میکند. این تابع همچنین دو پارامتر اختیاری دارد (flags و count)، پیشتر در مورد flags صحبت کردیم و count نیز بیانگر ماکزیمم تعداد انطباقی است که میخواهیم در repl جایگذاری شود - این مقدار میبایست یک عدد مثبت باشد و مقدار صفر (مقدار پیشفرض) برای آن به معنی هر تعداد (نامحدود) خواهد بود. پارامتر repl در این تابع میتواند از نوع رشته یا تابع باشد، ابتدا حالت رشته را بررسی میکنیم [`اسناد پایتون <https://docs.python.org/3/library/re.html#re.sub>`__]:: |
| 593 | + |
| 594 | + >>> import re # Python 3.x |
| 595 | + |
| 596 | + >>> string = 'Perl@1987,Python@1991,Ruby@1995' |
| 597 | + >>> repl = ' - ' |
| 598 | + >>> pattern = r'@\d+,?' |
| 599 | + |
| 600 | + >>> result = re.sub(pattern, repl, string) |
| 601 | + |
| 602 | + >>> type(result) |
| 603 | + <class 'str'> |
| 604 | + |
| 605 | + >>> print(result) |
| 606 | + Perl - Python - Ruby - |
| 607 | + |
| 608 | + >>> result = re.sub(pattern, repl, string, 2) # count=2 |
| 609 | + >>> print(result) |
| 610 | + Perl - Python - Ruby@1995 |
| 611 | + |
| 612 | + >>> result = re.sub(pattern, repl, string, 1) # count=1 |
| 613 | + >>> print(result) |
| 614 | + Perl - Python@1991,Ruby@1995 |
| 615 | + |
| 616 | +متد ``expand`` از شی Match که در ابتدای این درس مطرح شد را بیاد بیاورید، بدیهی است که pattern میتواند شامل گروهبندی نیز باشد، در این شرایط آنچه از قوانین موجود در پارامتر template متد ``expand`` گفته شد در repl (در حالتی که یک شی رشته است) نیز صدق میکند:: |
| 617 | + |
| 618 | + >>> result = re.sub(r'(\w+),(\w+),(\w+)', r'(\1) (\2) (\3)', 'Jazz,Rock,Pop') |
| 619 | + >>> print(result) |
| 620 | + (Jazz) (Rock) (Pop) |
| 621 | + |
| 622 | + >>> re.sub(r'(\w+),(\w+),(\w+)', r'(\g<1>) (\g<2>) (\g<3>)', 'Jazz,Rock,Pop') |
| 623 | + '(Jazz) (Rock) (Pop)' |
| 624 | + |
| 625 | + |
| 626 | +:: |
| 627 | + |
| 628 | + >>> re.sub(r'(?P<num>\d+)', r'#\g<num>#', 'Top 100 songs') |
| 629 | + 'Top #100# songs' |
| 630 | + |
| 631 | +به مثالی دیگر توجه نمایید:: |
| 632 | + |
| 633 | + >>> re.sub('x*', '-', 'abc@123,456') |
| 634 | + '-a-b-c-@-1-2-3-,-4-5-6-' |
| 635 | + |
| 636 | +الگو مورد استفاده برای متن مثال بالا یک Zero-length Match است (درس قبل) - [`regex101@ تست آنلاین <https://regex101.com/r/n0I6JU/1>`__] |
| 637 | + |
| 638 | + |
| 639 | +.. tip:: |
| 640 | + |
| 641 | + چنانچه تابع ``sub`` هیچ انطباقی از pattern در string پیدا نکند، مقدار string را بدون تغییر برمیگرداند:: |
| 642 | + |
| 643 | + >>> re.sub(r'\d', '-', 'abc@xyz') # Without matching |
| 644 | + 'abc@xyz' |
| 645 | + |
| 646 | + >>> re.sub(r'\d', '-', 'abc@123') |
| 647 | + 'abc@---' |
| 648 | + |
592 | 649 |
|
593 | 650 |
|
594 | 651 |
|
|
0 commit comments