GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing python.github.io — string --- عملیات رایج رشتهها
|
گزینه |
معنی |
|---|---|
|
فیلد را وادار میکند که در فضای موجود چپتراز باشد (این حالت برای بیشتر اشیاء پیشفرض است). |
|
فیلد را مجبور میکند که در فضای موجود راستچین باشد (این حالت برای اعداد پیشفرض است). |
|
قرار گرفتن پرکننده (padding) پس از علامت (در صورت وجود) و پیش از ارقام را اجباری میکند. این گزینه برای چاپ فیلدها در قالب '+000000120' به کار میرود. این گزینهی تراز فقط برای انواع عددی معتبر است، بهجز |
|
فیلد را وادار میکند که در فضای موجود وسطچین شود. |
توجه داشته باشید که اگر حداقل عرض فیلد تعریف نشده باشد، عرض فیلد همیشه هماندازهی دادهای خواهد بود که آن را پر میکند؛ بنابراین گزینهی تراز در این حالت معنایی ندارد.
گزینهی sign فقط برای انواع عددی معتبر است و میتواند یکی از موارد زیر باشد:
گزینه |
معنی |
|---|---|
|
نشان میدهد که باید برای اعداد مثبت و همچنین منفی از علامت استفاده شود. |
|
نشان میدهد که علامت باید فقط برای اعداد منفی استفاده شود (این رفتار پیشفرض است). |
فاصله |
نشان میدهد که برای اعداد مثبت باید از یک فاصله در ابتدا و برای اعداد منفی از علامت منفی استفاده شود. |
گزینه 'z' مقادیر صفر منفی ممیز شناور را پس از گرد شدن به دقت قالب، به صفر مثبت تبدیل میکند. این گزینه فقط برای انواع نمایش ممیز شناور معتبر است.
تغییر یافته در نسخهی 3.11: گزینه 'z' افزوده شد (همچنین PEP 682 را ببینید).
گزینهی '#' باعث میشود که «شکل جایگزین» برای تبدیل استفاده شود. شکل جایگزین برای انواع مختلف بهطور متفاوتی تعریف میشود. این گزینه تنها برای انواع عدد صحیح، شناور و مختلط معتبر است. برای اعداد صحیح، هنگامی که خروجی بهصورت مبنای دو، مبنای هشت یا مبنای شانزده باشد، این گزینه پیشوند مربوطه یعنی '0b'، '0o'، '0x' یا '0X' را به مقدار خروجی اضافه میکند. برای شناور و مختلط، شکل جایگزین باعث میشود که نتیجهی تبدیل همیشه شامل یک نویسهی نقطهی اعشار باشد، حتی اگر هیچ رقمی پس از آن نیاید. بهطور معمول، یک نویسهی نقطهی اعشار در نتیجهی این تبدیلها فقط در صورتی ظاهر میشود که رقمی پس از آن بیاید. علاوه بر این، برای تبدیلهای 'g' و 'G'، صفرهای پایانی از نتیجه حذف نمیشوند.
width یک عدد صحیح دهدهی است که حداقل عرض کل فیلد را تعریف میکند، شامل هرگونه پیشوند، جداکننده و سایر نویسههای قالببندی. اگر مشخص نشده باشد، عرض فیلد توسط محتوا تعیین میشود.
هنگامی که تراز صریحی داده نشده باشد، قرار دادن نویسهی صفر ('0') پیش از فیلد width، پدینگ صفر با در نظر گرفتن علامت را برای انواع عددی، بهجز complex، فعال میکند. این معادل نویسهی fill برابر '0' و نوع alignment برابر '=' است.
تغییر یافته در نسخهی 3.10: قرار دادن '0' پیش از فیلد width دیگر بر همترازی پیشفرض رشتهها تأثیری نمیگذارد.
precision یک عدد صحیح مبنای ده است که نشان میدهد برای انواع نمایش 'f' و 'F' چند رقم باید بعد از نقطه اعشار نمایش داده شوند، یا برای انواع نمایش 'g' یا 'G' چند رقم باید پیش و پس از نقطه اعشار نمایش داده شوند. برای انواع نمایش رشته، این فیلد حداکثر اندازه فیلد را نشان میدهد — به عبارت دیگر، نشان میدهد که چند نویسه از محتوای فیلد استفاده خواهد شد. استفاده از precision برای انواع نمایش عدد صحیح مجاز نیست.
گزینهی grouping پس از فیلدهای width و precision، جداکنندهی گروه ارقام را برای بخشهای صحیح و کسری یک عدد بهترتیب مشخص میکند. این گزینه میتواند یکی از موارد زیر باشد:
گزینه |
معنی |
|---|---|
|
برای نوع نمایش عدد صحیح |
|
برای نوع نمایش عدد صحیح |
برای جداکنندهی آگاه از locale، بهجای آن از 'n' نوع نمایش عدد شناور یا نوع نمایش عدد صحیح استفاده کنید.
تغییر یافته در نسخهی 3.1: گزینه ',' افزوده شد (همچنین PEP 378 را ببینید).
تغییر یافته در نسخهی 3.6: گزینهی '_' اضافه شد (همچنین PEP 515 را ببینید).
تغییر یافته در نسخهی 3.14: پشتیبانی از گزینهی grouping برای بخش کسری.
در نهایت، نوع تعیین میکند که دادهها چگونه باید ارائه شوند.
انواع ارائهی در دسترس برای رشته عبارتند از:
نوع
معنی
's'قالب رشته. این نوع پیشفرض برای رشتهها است و میتوان آن را حذف کرد.
None
همان
's'.
انواع ارائهی عدد صحیح موجود عبارتند از:
نوع
معنی
'b'قالب دودویی. عدد را در مبنای ۲ خروجی میدهد.
'c'نویسه. عدد صحیح را پیش از چاپ به نویسهی یونیکد متناظر تبدیل میکند.
'd'عدد صحیح دهدهی. عدد را در مبنای ۱۰ خروجی میدهد.
'o'قالب مبنای هشت. عدد را در مبنای ۸ خروجی میدهد.
'x'قالب مبنای شانزده. عدد را در مبنای ۱۶ خروجی میدهد و برای ارقام بزرگتر از ۹ از حروف کوچک استفاده میکند.
'X'قالب مبنای شانزده. عدد را در مبنای ۱۶ خروجی میدهد و برای ارقام بزرگتر از ۹ از حروف بزرگ استفاده میکند. در صورتی که
'#'مشخص شده باشد، پیشوند'0x'نیز به'0X'تبدیل به حروف بزرگ میشود.
'n'عدد. این همان
'd'است، با این تفاوت که از تنظیمات locale برای درج جداکنندههای مناسب گروه ارقام استفاده میکند. توجه داشته باشید که locale پیشفرض، locale سیستم نیست. بسته به مورد استفاده خود، ممکن است بخواهید پیش از استفاده از'n'،LC_NUMERICرا باlocale.setlocale()تنظیم کنید.None
همانند
'd'.
علاوه بر انواع نمایش بالا، میتوان اعداد صحیح را با انواع نمایش ممیز شناور که در زیر فهرست شدهاند نیز قالببندی کرد (بهجز 'n' و None). هنگام این کار، برای تبدیل عدد صحیح به عدد ممیز شناور پیش از قالببندی از float() استفاده میشود.
انواع نمایش موجود برای مقادیر float و Decimal عبارتند از:
نوع
معنی
'e'نماد علمی. برای دقت دادهشده
p، عدد را در نماد علمی با حرف 'e' که ضریب را از توان جدا میکند، قالببندی میکند. ضریب یک رقم پیش از نقطه اعشار وpرقم پس از آن دارد، که در مجموعp + 1رقم معنادار میشود. وقتی دقتی داده نشده باشد، از دقت6رقم پس از نقطه اعشار برایfloatاستفاده میکند و تمام ارقام ضریب را برایDecimalنمایش میدهد. اگرp=0باشد، نقطه اعشار حذف میشود مگر اینکه گزینه#استفاده شده باشد.برای
float، توان همیشه حداقل شامل دو رقم است و اگر مقدار صفر باشد، صفر خواهد بود.
'E'نماد علمی. مانند
'e'است، با این تفاوت که از 'E' بزرگ بهعنوان نویسهی جداکننده استفاده میکند.
'f'نماد نقطهثابت. برای دقت دادهشده
p، عدد را بهصورت یک عدد اعشاری با دقیقاًpرقم پس از نقطه اعشار قالببندی میکند. اگر دقتی داده نشده باشد، برایfloatاز دقت6رقم پس از نقطه اعشار استفاده میکند، و برایDecimalاز دقتی بهاندازه کافی زیاد برای نمایش تمام ارقام ضریب استفاده میکند. اگرp=0باشد، نقطه اعشار حذف میشود، مگر اینکه از گزینه#استفاده شده باشد.
'F'نماد نقطهثابت. مانند
'f'، اماnanرا بهNANوinfرا بهINFتبدیل میکند.
'g'قالب عمومی. برای دقت دادهشده
p >= 1، عدد بهpرقم بامعنا گرد میشود و سپس نتیجه بسته به بزرگی آن، در قالب ممیز ثابت یا نماد علمی قالببندی میشود. دقت0معادل دقت1در نظر گرفته میشود.قواعد دقیق به شرح زیر است: فرض کنید نتیجهای که با نوع نمایش
'e'و دقتp-1قالببندی شده باشد، توانexpداشته باشد. سپس، اگرm <= exp < pباشد، که در آنmبرای floatها برابر با -۴ و برایDecimalsبرابر با -۶ است، عدد با نوع نمایش'f'و دقتp-1-expقالببندی میشود. در غیر این صورت، عدد با نوع نمایش'e'و دقتp-1قالببندی میشود. در هر دو حالت، صفرهای انتهایی بیاهمیت از بخش معنادار (significand) حذف میشوند، و اگر هیچ رقمی پس از آن باقی نمانده باشد، نقطهی اعشار نیز حذف میشود، مگر آنکه از گزینهی'#'استفاده شده باشد.در صورتی که دقتی مشخص نشده باشد، برای
floatاز دقت6رقم معنادار استفاده میشود. برایDecimal، ضریب نتیجه از ارقام ضریب مقدار تشکیل میشود؛ برای مقادیری که از نظر قدر مطلق کوچکتر از1e-6هستند و برای مقادیری که ارزش مکانی کماهمیتترین رقم آنها بزرگتر از ۱ است، از نماد علمی استفاده میشود و در غیر این صورت از نماد نقطهثابت استفاده میشود.بینهایت مثبت و منفی، صفر مثبت و منفی و مقادیر NaN، صرفنظر از دقت، بهترتیب بهصورت
inf،-inf،0،-0وnanقالببندی میشوند.
'G'قالب عمومی. همانند
'g'است، با این تفاوت که اگر عدد بیش از حد بزرگ شود، به'E'تغییر میکند. نمایش بینهایت و NaN نیز با حروف بزرگ است.
'n'عدد. این همان
'g'است، با این تفاوت که از تنظیمات locale فعلی برای درج جداکنندههای مناسب گروهبندی ارقام در بخش صحیح یک عدد استفاده میکند. توجه داشته باشید که تنظیمات locale پیشفرض، تنظیمات locale سیستم نیست. بسته به مورد استفاده شما، ممکن است بخواهید پیش از استفاده از'n'،LC_NUMERICرا باlocale.setlocale()تنظیم کنید.
'%'درصد. عدد را در ۱۰۰ ضرب میکند و آن را در قالب ثابت (
'f') نمایش میدهد و به دنبال آن علامت درصد قرار میگیرد.None
برای
float، این مانند نوع'g'است، با این تفاوت که هنگامی که برای قالببندی نتیجه از نماد نقطهثابت استفاده میشود، همیشه حداقل یک رقم پس از نقطه اعشار را شامل میشود و هرگاهexp >= p - 1باشد، به نماد علمی تغییر میکند. وقتی دقت مشخص نشده باشد، دقت بهاندازهای خواهد بود که برای نمایش وفادارانهی مقدار دادهشده لازم است.برای
Decimal، این معادل'g'یا'G'است، بسته به مقدارcontext.capitalsدر زمینهی اعشاری جاری.اثر کلی، مطابقت با خروجی
str()است، همانگونه که توسط سایر اصلاحکنندههای قالب تغییر یافته است.
نتیجه باید بهدرستی تا دقت مشخص p رقم پس از نقطهی اعشار گرد شود. حالت گرد کردن برای float با حالت تابع توکار round() مطابقت دارد. برای Decimal، از حالت گرد کردن زمینه جاری استفاده میشود.
انواع نمایش موجود برای complex همان انواع موجود برای float هستند ('%' مجاز نیست). هر دو بخش حقیقی و موهومی یک عدد مختلط، مطابق نوع نمایش مشخصشده، بهصورت اعداد ممیز شناور قالببندی میشوند. این دو با علامت اجباری بخش موهومی از هم جدا میشوند و این بخش با یک پسوند j پایان مییابد. اگر نوع نمایش وجود نداشته باشد، نتیجه با خروجی str() مطابقت خواهد داشت (اعداد مختلط با بخش حقیقی غیرصفر نیز در پرانتز قرار میگیرند)، که ممکن است توسط سایر اصلاحکنندههای قالب تغییر کند.
این بخش شامل مثالهایی از سینتکس str.format() و مقایسهای با قالببندی قدیمی % است.
در بیشتر موارد، سینتکس شبیه به قالببندی قدیمی % است، با اضافه شدن {} و استفاده از : بهجای %. برای مثال، '%03.2f' را میتوان به '{:03.2f}' تبدیل کرد.
سینتکس جدید قالببندی همچنین از گزینههای جدید و متفاوتی پشتیبانی میکند که در مثالهای زیر نشان داده شدهاند.
دسترسی به آرگومانها بر اساس جایگاه:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c') 'a, b, c' >>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only 'a, b, c' >>> '{2}, {1}, {0}'.format('a', 'b', 'c') 'c, b, a' >>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence 'c, b, a' >>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated 'abracadabra'
دسترسی به آرگومانها با نام:
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W') 'Coordinates: 37.24N, -115.81W' >>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'} >>> 'Coordinates: {latitude}, {longitude}'.format(**coord) 'Coordinates: 37.24N, -115.81W'
دسترسی به ویژگیهای آرگومانها:
>>> c = 3-5j >>> ('The complex number {0} is formed from the real part {0.real} ' ... 'and the imaginary part {0.imag}.').format(c) 'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.' >>> class Point: ... def __init__(self, x, y): ... self.x, self.y = x, y ... def __str__(self): ... return 'Point({self.x}, {self.y})'.format(self=self) ... >>> str(Point(4, 2)) 'Point(4, 2)'
دسترسی به آیتمهای آرگومانها:
>>> coord = (3, 5) >>> 'X: {0[0]}; Y: {0[1]}'.format(coord) 'X: 3; Y: 5'
جایگزینی %s و %r:
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2') "repr() shows quotes: 'test1'; str() doesn't: test2"
تراز کردن متن و تعیین عرض:
>>> '{:<30}'.format('left aligned') 'left aligned ' >>> '{:>30}'.format('right aligned') ' right aligned' >>> '{:^30}'.format('centered') ' centered ' >>> '{:*^30}'.format('centered') # use '*' as a fill char '***********centered***********'
جایگزینی %+f، %-f و % f و تعیین علامت:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always '+3.140000; -3.140000' >>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers ' 3.140000; -3.140000' >>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}' '3.140000; -3.140000'
جایگزینی %x و %o و تبدیل مقدار به مبناهای مختلف:
>>> # format also supports binary numbers >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) 'int: 42; hex: 2a; oct: 52; bin: 101010' >>> # with 0x, 0o, or 0b as prefix: >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
استفاده از ویرگول یا زیرخط بهعنوان جداکننده گروه ارقام:
>>> '{:,}'.format(1234567890) '1,234,567,890' >>> '{:_}'.format(1234567890) '1_234_567_890' >>> '{:_b}'.format(1234567890) '100_1001_1001_0110_0000_0010_1101_0010' >>> '{:_x}'.format(1234567890) '4996_02d2' >>> '{:_}'.format(123456789.123456789) '123_456_789.12345679' >>> '{:.,}'.format(123456789.123456789) '123456789.123,456,79' >>> '{:,._}'.format(123456789.123456789) '123,456,789.123_456_79'
بیان یک درصد:
>>> points = 19 >>> total = 22 >>> 'Correct answers: {:.2%}'.format(points/total) 'Correct answers: 86.36%'
استفاده از قالببندی مختص نوع:
>>> import datetime as dt >>> d = dt.datetime(2010, 7, 4, 12, 15, 58) >>> '{:%Y-%m-%d %H:%M:%S}'.format(d) '2010-07-04 12:15:58'
آرگومانهای تودرتو و نمونههای پیچیدهتر:
>>> for align, text in zip('<^>', ['left', 'center', 'right']): ... '{0:{fill}{align}16}'.format(text, fill=align, align=align) ... 'left<<<<<<<<<<<<' '^^^^^center^^^^^' '>>>>>>>>>>>right' >>> >>> octets = [192, 168, 0, 1] >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets) 'C0A80001' >>> int(_, 16) 3232235521 >>> >>> width = 5 >>> for num in range(5,12): ... for base in 'dXob': ... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ') ... print() ... 5 5 5 101 6 6 6 110 7 7 7 111 8 8 10 1000 9 9 11 1001 10 A 12 1010 11 B 13 1011
نکته
این قابلیت که در اینجا توضیح داده شده است، در پایتون 2.4 معرفی شد؛ یک روش قالببندی ساده مبتنی بر عبارتهای باقاعده. این قابلیت پیش از str.format()، formatted string literals و template string literals وجود داشته است.
این مورد به مقادیر لفظی رشته قالبی (t-strings)، که در پایتون 3.14 معرفی شدهاند، مربوط نمیشود. حاصل ارزیابی این موارد، اشیای string.templatelib.Template است که در ماژول string.templatelib قرار دارند.
رشتههای الگو جایگزینیهای رشتهای سادهتری را فراهم میکنند، همانطور که در PEP 292 توضیح داده شده است. یکی از کاربردهای اصلی رشتههای الگو، بینالمللیسازی (i18n) است، زیرا در آن زمینه، سینتکس و قابلیت سادهتر، ترجمهی آنها را نسبت به سایر امکانات توکار قالببندی رشته در پایتون آسانتر میسازد. بهعنوان نمونهای از یک کتابخانهی ساختهشده بر پایهی رشتههای الگو برای i18n، بستهی flufl.i18n را ببینید.
رشتههای قالب از جایگزینیهای مبتنی بر $ با استفاده از قوانین زیر پشتیبانی میکنند:
$$ یک خنثیسازی است؛ با یک $ جایگزین میشود.
$identifier نشاندهندهی یک جاینگهدار جایگزینی است که با کلید نگاشت "identifier" مطابقت دارد. بهطور پیشفرض، "identifier" به هر رشتهی الفباعددی ASCII بدون حساسیت به بزرگی و کوچکی حروف (شامل زیرسطرها) که با زیرخط یا حرف ASCII آغاز شود، محدود است. نخستین نویسهی غیرشناسه پس از نویسهی $، مشخصات این جاینگهدار را پایان میدهد.
${identifier} معادل $identifier است. هنگامی که نویسههای معتبر شناسه پس از جاینگهدار بیایند اما بخشی از آن نباشند، استفاده از این قالب الزامی است، مانند "${noun}ification".
هر ظهور دیگر $ در رشته، منجر به پرتاب ValueError خواهد شد.
ماژول string یک کلاس Template ارائه میدهد که این قوانین را پیادهسازی میکند. متدهای Template عبارتند از:
سازنده یک آرگومان دریافت میکند که رشتهی الگو است.
جایگذاری قالب را انجام میدهد و یک رشته جدید برمیگرداند. mapping هر شیء دیکشنریمانندی است که کلیدهای آن با جاینگهدارهای قالب مطابقت دارند. بهعنوان جایگزین، میتوانید آرگومانهای کلیدواژهای ارائه دهید، که در آنها کلیدواژهها همان جاینگهدارها هستند. وقتی هر دو mapping و kwds داده شده باشند و جاینگهدارهای تکراری وجود داشته باشد، جاینگهدارهای kwds اولویت دارند.
مانند substitute()، با این تفاوت که اگر جاینگهدارها در mapping و kwds موجود نباشند، بهجای پرتاب یک استثنای KeyError، جاینگهدار اصلی بهصورت دستنخورده در رشتهی حاصل ظاهر خواهد شد. همچنین، برخلاف substitute()، هر ظهور دیگرِ $ صرفاً $ را برمیگرداند، بهجای پرتاب ValueError.
اگرچه ممکن است همچنان استثناهای دیگری رخ دهند، این متد «امن» نامیده میشود، زیرا همیشه تلاش میکند به جای پرتاب استثنا، رشتهای قابل استفاده برگرداند. از معنایی دیگر، safe_substitute() ممکن است هر چیزی باشد جز امن، زیرا قالبهای نادرست حاوی جداکنندههای معلق، آکولادهای ناهمخوان، یا جاینگهدارهایی که شناسههای معتبر پایتون نیستند را بیسرصدا نادیده میگیرد.
اگر قالب دارای جاینگهدارندههای نامعتبری باشد که باعث شود substitute() یک ValueError پرتاب کند، False را برمیگرداند.
اضافه شده در نسخهی 3.11.
فهرستی از شناسههای معتبر موجود در قالب را به ترتیبی که برای نخستین بار ظاهر میشوند برمیگرداند و از هر شناسه نامعتبری چشمپوشی میکند.
اضافه شده در نسخهی 3.11.
نمونههای Template همچنین یک ویژگی دادهای عمومی ارائه میدهند:
این همان شیءای است که به آرگومان template سازنده داده میشود. بهطور کلی، نباید آن را تغییر دهید، اما دسترسی فقطخواندنی اجباری نیست.
در اینجا مثالی از چگونگی استفاده از یک Template آورده شده است:
>>> from string import Template >>> s = Template('$who likes $what') >>> s.substitute(who='tim', what='kung pao') 'tim likes kung pao' >>> d = dict(who='tim') >>> Template('Give $who $100').substitute(d) Traceback (most recent call last): ... ValueError: Invalid placeholder in string: line 1, col 11 >>> Template('$who likes $what').substitute(d) Traceback (most recent call last): ... KeyError: 'what' >>> Template('$who likes $what').safe_substitute(d) 'tim likes $what'
استفاده پیشرفته: شما میتوانید با مشتق کردن زیرکلاسهایی از Template، سینتکس جاینگدار، نویسهی جداکننده، یا کل عبارت باقاعدهی مورد استفاده برای تجزیهی رشتههای قالب را سفارشی کنید. برای این کار، میتوانید این ویژگیهای کلاس را بازنویسی کنید:
delimiter -- این رشتهی لفظی، جداکنندهی معرف جاینگهدار را توصیف میکند. مقدار پیشفرض $ است. توجه داشته باشید که این نباید یک عبارت باقاعده باشد، زیرا پیادهسازی در صورت نیاز re.escape() را روی این رشته فراخوانی میکند. همچنین توجه داشته باشید که نمیتوانید جداکننده را پس از ایجاد کلاس تغییر دهید (یعنی یک جداکنندهی متفاوت باید در فضای نام کلاسِ زیرکلاس تنظیم شود).
idpattern -- این عبارت باقاعدهی است که الگوی جاینگهدارهای بدون آکولاد را توصیف میکند. مقدار پیشفرض، عبارت باقاعده (?a:[_a-z][_a-z0-9]*) است. اگر این مقدار داده شده باشد و braceidpattern برابر None باشد، این الگو برای جاینگهدارهای دارای آکولاد نیز اعمال خواهد شد.
نکته
از آنجا که flags پیشفرض re.IGNORECASE است، الگوی [a-z] میتواند با برخی نویسههای غیر ASCII تطابق داشته باشد. به همین دلیل، ما در اینجا از پرچم محلی a استفاده میکنیم.
تغییر یافته در نسخهی 3.7: میتوان از braceidpattern برای تعریف الگوهای جداگانهای که در داخل و خارج از آکولادها استفاده میشوند، استفاده کرد.
braceidpattern — این مانند idpattern است، اما الگوی جاینگهدارهای دارای آکولاد را توصیف میکند. پیشفرض آن None است که به معنای بازگشت به idpattern است (یعنی هم داخل آکولادها و هم خارج از آنها از یک الگو استفاده میشود). اگر داده شود، این به شما امکان میدهد الگوهای متفاوتی برای جاینگهدارهای دارای آکولاد و بدون آکولاد تعریف کنید.
اضافه شده در نسخهی 3.7.
flags -- پرچمهای عبارت باقاعده که هنگام کامپایل عبارت باقاعدهی مورد استفاده برای تشخیص جایگزینیها اعمال خواهند شد. مقدار پیشفرض re.IGNORECASE است. توجه داشته باشید که re.VERBOSE همواره به پرچمها اضافه خواهد شد، بنابراین idpatterns سفارشی باید از قراردادهای عبارتهای باقاعده پرجزئیات (verbose) پیروی کنند.
اضافه شده در نسخهی 3.2.
بهعنوان جایگزین، میتوانید کل الگوی عبارت باقاعده را با بازنویسی ویژگی کلاس pattern فراهم کنید. اگر این کار را انجام دهید، مقدار باید یک رشتهی الگوی عبارت باقاعده یا یک شیء عبارت باقاعدهی کامپایلشده، با چهار گروه ثبتکننده نامدار باشد. گروههای ثبتکننده با قوانین بیانشده در بالا، بههمراه قانون جاینگهدار نامعتبر، مطابقت دارند:
escaped -- این گروه با دنباله خنثیسازی، برای مثال $$، در الگوی پیشفرض مطابقت دارد.
named -- این گروه با نام جاینگهدار بدون آکولاد مطابقت دارد؛ نباید جداکننده را در گروه ثبتکننده بگنجاند.
braced -- این گروه با نام جاینگهدار محصور در آکولاد مطابقت دارد؛ نباید در گروه ثبتکننده (capturing group) شامل جداکننده یا آکولادها باشد.
invalid -- این گروه با هر الگوی جداکننده دیگری (معمولاً یک جداکننده) مطابقت دارد و باید در انتهای عبارت باقاعده قرار گیرد.
متدهای این کلاس در صورتی استثنای ValueError را پرتاب میکنند که الگو با قالب تطبیق داشته باشد، بدون اینکه یکی از این گروههای نامدار تطبیق یافته باشد.
آرگومان را با استفاده از str.split() به کلمات تقسیم کنید، هر کلمه را با استفاده از str.capitalize() حرف اول بزرگ کنید، و کلمات با حرف اول بزرگ را با استفاده از str.join() بههم بپیوندید. اگر آرگومان دوم اختیاری sep وجود نداشته باشد یا None باشد، دنبالههایی از نویسههای فضای خالی با یک فاصله جایگزین میشوند و فضاهای خالی ابتدا و انتها حذف میشوند، در غیر این صورت از sep برای تقسیم و بههم پیوستن کلمات استفاده میشود.