مت

متدهای رشته در Python

60 تمرین

درباره‌ی متدهای رشته

یک str یک دنباله‌ی تغییرناپذیر از کدپوینت‌های یونیکد است. این می‌تواند شامل حروف، نشانه‌های اعرابی، نویسه‌های موقعیت‌دهی، اعداد، نمادهای ارز، ایموجی، نقطه‌گذاری، فاصله و شکست خط و بیشتر از این‌ها باشد.

رشته‌ها همه‌ی عملیات‌های مشترک دنباله را پیاده‌سازی می‌کنند و می‌توان با نحوه‌ی نگارش for item in <str> یا for index, item in enumerate(<str>) روی آن‌ها پیمایش کرد. می‌توان به هر کدپوینت به‌صورت جداگانه (رشته‌های با طول ۱) با شماره‌ی 0-based index از سمت چپ یا شماره‌ی -1-based index از سمت راست ارجاع داد.

رشته‌ها را می‌توان با <str> + <other str> یا <str>.join(<iterable>) به هم پیوند داد و با <str>.split(<separator>) تفکیک کرد. آن‌ها همچنین گزینه‌های متعدد دیگری برای قالب‌بندی و ترکیب ارائه می‌دهند.

برای کار بیشتر با رشته‌ها، Python مجموعه‌ی غنی‌ای از متدهای رشته را برای جست‌وجو، پاک‌سازی، تبدیل، ترجمه و بسیاری عملیات دیگر فراهم می‌کند.

برخی از متدهای پرکاربردتر str عبارت‌اند از:

  • بررسی پیشوند/پسوند با <str>.startswith(<substr>) و <str>.endswith(<substr>)
  • تغییر بزرگی و کوچکی حروف رشته با متدهایی مانند <str>.title()، <str>.upper()/<str>.lower() و <str>.swapcase()
  • حذف نویسه‌های ابتدایی یا انتهایی رشته با استفاده از <str>.strip(<chars>)، <str>.lstrip(<chars>) یا <str>.rstrip(<chars>)
  • جایگزینی زیررشته‌ها با متد <str>.replace(<old>, <new>)

چون str تغییرناپذیر است، مقدار یک شیء str در حافظه نمی‌تواند تغییر کند؛ متدهایی که به نظر می‌رسد رشته‌ای را تغییر می‌دهند، یک نسخه یا نمونه‌ی جدید از آن شیء str را برمی‌گردانند.

<str>.endswith(<suffix>) اگر رشته با <suffix> پایان یابد True و در غیر این صورت False برمی‌گرداند.

>>> 'My heart breaks. 💔'.endswith('💔')
True

>>> 'cheerfulness'.endswith('ness')
True

# Punctuation is part of the string, so needs to be included in any endswith match.
>>> 'Do you want to 💃?'.endswith('💃')
False

>>> 'The quick brown fox jumped over the lazy dog.'.endswith('dog')
False

<str>.title() رشته‌ای را تجزیه می‌کند و نخستین «نویسه»ی هر «واژه»ی یافت‌شده را با حروف بزرگ می‌نویسد. در Python، این کار به‌شدت به کدک زبان استفاده‌شده و به اینکه آن زبان خاص واژه‌ها و نویسه‌ها را چگونه نمایش می‌دهد بستگی دارد. ممکن است قواعد محلی هم برای یک زبان یا مجموعه‌نویسه برقرار باشد.

>>> man_in_hat_th = 'ผู้ชายใส่หมวก'
>>> man_in_hat_ru = 'мужчина в шляпе'
>>> man_in_hat_ko = '모자를 쓴 남자'
>>> man_in_hat_en = 'the man in the hat.'

>>> man_in_hat_th.title()
'ผู้ชายใส่หมวก'

>>> man_in_hat_ru.title()
'Мужчина В Шляпе'

>>> man_in_hat_ko.title()
'모자를 쓴 남자'

>> man_in_hat_en.title()
'The Man In The Hat.'

<str>.strip(<chars>) یک نسخه از str را برمی‌گرداند که <chars> ابتدایی و انتهایی آن حذف شده است. کدپوینت‌های مشخص‌شده در <chars> یک پیشوند یا پسوند نیستند؛ همه‌ی ترکیب‌های این کدپوینت‌ها از هر دو سر رشته حذف می‌شوند. اگر چیزی برای <chars> مشخص نشود، همه‌ی ترکیب‌های کدپوینت‌های فضای سفید حذف می‌شوند. اگر فقط حذف از سمت چپ یا راست مورد نظر باشد، می‌توان از <str>.lstrip(<chars>) و <str>.rstrip(<chars>) استفاده کرد.

# This will remove "https://", because it can be formed from "/stph:". 
>>> 'https://unicode.org/emoji/'.strip('/stph:')
'unicode.org/emoji'

# Removal of all whitespace from both ends of the str.
>>> '   🐪🐪🐪🌟🐪🐪🐪   '.strip()
'🐪🐪🐪🌟🐪🐪🐪'

>>> justification = 'оправдание'
>>> justification.strip('еина')
'оправд'

# Prefix and suffix in one step.
>>> 'unaddressed'.strip('dnue')
'address'

>>> '  unaddressed  '.strip('dnue ')
'address'

<str>.replace(<substring>, <replacement substring>) نسخه‌ای از رشته را برمی‌گرداند که همه‌ی رخدادهای <substring> در آن با <replacement substring> جایگزین شده‌اند.

نقل‌قول زیر از The Hunting of the Snark اثر Lewis Carroll است.

# The Hunting of the Snark, by Lewis Carroll
>>> quote = '''
"Just the place for a Snark!" the Bellman cried,
   As he landed his crew with care;
Supporting each man on the top of the tide
   By a finger entwined in his hair.

"Just the place for a Snark! I have said it twice:
   That alone should encourage the crew.
Just the place for a Snark! I have said it thrice:
   What I tell you three times is true."
'''

>>> quote.replace('Snark', '🐲')
...
'\n"Just the place for a 🐲!" the Bellman cried,\n   As he landed his crew with care;\nSupporting each man on the top of the tide\n   By a finger entwined in his hair.\n\n"Just the place for a 🐲! I have said it twice:\n   That alone should encourage the crew.\nJust the place for a 🐲! I have said it thrice:\n   What I tell you three times is true."\n'

>>> 'bookkeeper'.replace('kk', 'k k')
'book keeper'

🌟تازه در Python 3.9 افزوده شد

Python 3.9 دو متد جدید رشته معرفی می‌کند که حذف پیشوندها و پسوندها را بسیار آسان‌تر می‌کنند.

<str>.removeprefix(<substring>) رشته را بدون پیشوند (string[len(<substring>):]) برمی‌گرداند. اگر <substring> وجود نداشته باشد، یک نسخه از رشته‌ی اصلی برگردانده می‌شود.

# removing a prefix
>>> 'TestHook'.removeprefix('Test')
'Hook'
>>> 'bookkeeper'.removeprefix('book')
'keeper'

<str>.removesuffix(<substring>) رشته را بدون پسوند (string[:-len(substring)]) برمی‌گرداند. اگر <substring> وجود نداشته باشد، یک نسخه از رشته‌ی اصلی برگردانده می‌شود.

# removing a suffix
>>> 'TestHook'.removesuffix('Hook')
'Test'
>>> 'bookkeeper'.removesuffix('keeper')
'book'

برای مثال‌ها و متدهای بیشتر، آموزش غیررسمی نقطه‌ی شروعی خوب است. How to Unicode در مستندات Python جزئیات زیادی درباره‌ی یونیکد، کدگذاری، بایت و دیگر ملاحظات فنی کار با رشته‌ها در Python ارائه می‌دهد.

Python همچنین از عبارت‌های باقاعده از طریق ماژول re پشتیبانی می‌کند که در یک مفهوم آینده پوشش داده خواهد شد.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

متدهای رشته را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین متدهای رشته قفل 3 تمرین دیگر را باز کنید