این ماژول عملیات تطبیق عبارت منظم شبیه به کسانی که در پرل فراهم می کند.
هر دو الگو و رشته های مورد جستجو می توانند رشته های یونیکد ( خ ) و همچنین رشته های 8 بیتی ( بایت) باشند. با این حال, رشته های یونیکد و رشته های 8 بیتی را نمی توان مخلوط کرد: یعنی شما نمی توانید یک رشته یونیکد را با الگوی بایت مطابقت دهید یا برعکس; به طور مشابه, هنگام درخواست تعویض, رشته جایگزینی باید از همان نوع الگو و رشته جستجو باشد.
عبارات منظم از کاراکتر بک اسلش ( '\' ) برای نشان دادن فرم های خاص یا اجازه استفاده از کاراکترهای خاص بدون استناد به معنای خاص خود استفاده می کنند. این برخورد با استفاده از پایتون از همان شخصیت برای همان هدف در رشته تحت اللفظی; مثلا, برای مطابقت با یک بک اسلش تحت اللفظی, یکی ممکن است به ارسال '\\\\' به عنوان رشته الگوی, چرا که عبارت منظم باید \\ , و هر بک اسلش باید به عنوان \\ در داخل یک رشته پایتون به طور منظم تحت اللفظی بیان شود. همچنین لطفا توجه داشته باشید که هر توالی فرار نامعتبر در استفاده پایتون از بک اسلش در الفبای رشته اکنون یک هشدار استهلاک ایجاد می کند و در اینده این به یک نحو تبدیل می شود . این رفتار حتی اگر یک دنباله فرار معتبر برای یک عبارت منظم باشد اتفاق خواهد افتاد.
راه حل استفاده از علامت رشته خام پایتون برای الگوهای بیان منظم است . بنابراین ر" \ ن "یک رشته دو کاراکتری است که شامل '\' و 'ن' است در حالی که" \ن " یک رشته تک کاراکتری است که حاوی یک خط جدید است. معمولا الگوها با استفاده از این علامت رشته خام در کد پایتون بیان می شوند.
توجه به این نکته مهم است که اکثر عملیات بیان منظم به صورت توابع و روشهای سطح ماژول در عبارات منظم کامپایل شده در دسترس هستند . توابع کلید های میانبر که شما نیاز به کامپایل یک شی عبارت منظم برای اولین بار, اما دست برخی از پارامترهای ریز تنظیم.
ماژول عبارت منظم شخص ثالث, که دارای یک رابط کاربری سازگار با ماژول مجدد کتابخانه استاندارد, اما قابلیت های اضافی و پشتیبانی کامل تر از یونیکد.
نحو عبارت منظم¶
توابع موجود در این ماژول به شما امکان می دهد یک رشته خاص با یک عبارت منظم داده شده مطابقت داشته باشد (یا اگر یک عبارت منظم داده شده با یک رشته خاص مطابقت داشته باشد که به همان چیز برمی گردد).
عبارات منظم را می توان برای تشکیل عبارات منظم جدید بهم پیوست. به طور کلی, اگر یک رشته پ مسابقات الف و رشته دیگری س مسابقات ب , رشته پیک ابی مطابقت. این نگه می دارد مگر اینکه یک یا ب شامل عملیات اولویت کم; شرایط مرزی بین یک و ب ; و یا مراجع گروه شماره اند. بنابراین عبارات پیچیده را می توان به راحتی از عبارات ابتدایی ساده تری مانند عبارات توصیف شده در اینجا ساخت. برای اطلاعات بیشتر از نظریه و اجرای عبارات منظم, مشورت کتاب فریدل [فریدل09] , و یا تقریبا هر کتاب درسی در مورد ساخت و ساز کامپایلر.
توضیح مختصری از قالب عبارات منظم به شرح زیر است. برای کسب اطلاعات بیشتر و یک سخنرانی ملایم تر با عبارت منظم مشورت کنید چگونه.
عبارات منظم می توانند شامل کاراکترهای خاص و معمولی باشند. اکثر شخصیت های معمولی مانند 'الف', 'الف' یا ' 0 ' ساده ترین عبارات منظم هستند. شما می توانید شخصیت های معمولی الحاق, بنابراین مسابقات گذشته رشته 'گذشته' . (در بقیه این بخش , ما دوباره ارسال در این سبک خاص, معمولا بدون نقل قول, و رشته به 'در نقل قول تنها همسان باشد .)
برخی از شخصیت ها مانند ' | ' یا ' ('خاص هستند. شخصیت های خاص یا برای کلاس های شخصیت های معمولی ایستاده اند یا بر چگونگی تفسیر عبارات منظم در اطراف خود تاثیر می گذارند.
اپراتورهای تکرار و یا سنجش ( * ,+,? ,, و غیره) نمی تواند مستقیما تو در تو باشد. این اجتناب ابهام با پسوند اصلاح غیر حریص ? و با سایر اصلاح کننده ها در سایر پیاده سازی ها. برای اعمال تکرار دوم در تکرار درونی ممکن است از پرانتز استفاده شود. مثلا, بیان (?: الف) * با هر مضربی از شش کاراکتر مطابقت دارد.
شخصیت های خاص عبارتند از:
(نقطه.) در حالت پیش فرض, این مسابقات هر شخصیت به جز یک خط جدید. اگر پرچم نقطه مشخص شده است, این مسابقات هر شخصیت از جمله یک خط جدید.
(هشتک.) با شروع رشته مطابقت دارد و در حالت چند خطی نیز بلافاصله بعد از هر خط جدید مطابقت دارد.
انتهای رشته یا درست قبل از خط جدید در انتهای رشته را مطابقت می دهد و در حالت چند خطی نیز قبل از خط جدید مطابقت دارد. تولی مسابقات هر دو 'تولی' و 'فوبار', در حالی که عبارت منظم تولی$ مسابقات تنها'تولی'. جالب تر, جستجو برای تولی. در حالت چند خطی-در حالت چند خطی-در حالت چند خطی-در حالت چند خطی-دو مسابقه (خالی) پیدا می شود: یکی درست قبل از خط جدید و دیگری در انتهای رشته.
باعث می شود دوباره و در نتیجه برای مطابقت 0 و یا تکرار بیشتر از دوباره قبل, به عنوان بسیاری از تکرار به عنوان امکان پذیر است. اب * مطابقت خواهد داشت '' '' اب', یا' الف 'به دنبال هر تعداد از 'ب'.
باعث می شود دوباره و در نتیجه برای مطابقت با 1 و یا تکرار بیشتر از دوباره قبل. اب + مطابقت خواهد داشت 'الف' و سپس هر عدد غیر صفر 'ب'.
باعث می شود دوباره و در نتیجه برای مطابقت با 0 یا 1 تکرار دوباره قبل. ب? مطابقت خواهد داشت یا 'یک' یا 'اب'.
Like the '*' , '+' , and '?' quantifiers, those where '+' is appended also match as many times as possible. However, unlike the true greedy quantifiers, these do not allow back-tracking when the expression following it fails to match. These are known as possessive quantifiers. For example, a*a will match 'aaaa' because the a* will match all 4 'a' s, but, when the final 'a' is encountered, the expression is backtracked so that in the end the a* ends up matching 3 'a' s total, and the fourth 'a' is matched by the final 'a' . However, when a*+a is used to match 'aaaa' , the a*+ will match all 4 'a' , but when the final 'a' fails to find any more characters to match, the expression cannot be backtracked and will thus fail to match. x*+ , x++ and x?+ are equivalent to (?>x*) , (?>x+) and (?>ایکس?) به ترتیب.
جدید در نسخه 3.11.
مشخص می کند که دقیقا کپی متر از دوباره قبلی باید همسان; مسابقات کمتر باعث کل دوباره برای مطابقت ندارد. مثلا, یک مطابقت دقیقا شش شخصیت 'یک', اما نه پنج.
باعث می شود که دوباره و در نتیجه برای مطابقت از متر به نفر تکرار دوباره قبل, تلاش برای مطابقت با تکرار به عنوان بسیاری که ممکن است. مثلا, از مطابقت 3 به 5 ' یک ' شخصیت. حذف م یک کران پایین تر از صفر مشخص, و حذف نفر یک حد بالایی بی نهایت مشخص. به عنوان مثال , اب مطابقت خواهد کرد 'اعب' یا هزار 'یک' شخصیت پس از 'ب', اما نه 'اعب' . کاما ممکن است حذف نشود یا اصلاح کننده با فرم توصیف شده قبلی اشتباه گرفته شود.
باعث می شود که دوباره و در نتیجه برای مطابقت از متر به نفر تکرار دوباره قبل, تلاش برای مطابقت به عنوان چند تکرار که ممکن است. این نسخه غیر حریص کمیت کننده قبلی است. مثلا, در رشته 6 کاراکتر 'سا', یک مطابقت خواهد داشت 5' یک ' شخصیت, در حالی که یک? فقط با 3 کاراکتر مطابقت دارد.
Causes the resulting RE to match from m to n repetitions of the preceding RE, attempting to match as many repetitions as possible without establishing any backtracking points. This is the possessive version of the quantifier above. For example, on the 6-character string 'aaaaaa' , a+aa attempt to match 5 'a' characters, then, requiring 2 more 'a' s, will need more characters than available and thus fail, while aaa will match with a capturing 5, then 4 'a' s by backtracking and then the final 2 'a' s are matched by the final aa in the pattern. x+ is equivalent to (?>x) .
جدید در نسخه 3.11.
در هر دو صورت فرار شخصیت های خاص (به شما اجازه برای مطابقت با شخصیت های مانند'*','? و غیره), و یا سیگنال های یک توالی خاص; توالی خاص در زیر مورد بحث.
اگر از رشته خام برای بیان الگو استفاده نمی کنید, به یاد داشته باشید که پایتون همچنین از بک اسلش به عنوان دنباله فرار در حروف رشته استفاده می کند. با این حال, اگر پایتون توالی نتیجه تشخیص, بک اسلش باید دو بار تکرار. این پیچیده و سخت به درک, بنابراین بسیار توصیه می شود که شما با استفاده از رشته های خام برای همه اما ساده ترین عبارات.
برای نشان دادن مجموعه ای از کاراکترها استفاده می شود. در یک مجموعه:
به عنوان مثال می توان شخصیت ها را به صورت جداگانه لیست کرد .
دامنه کاراکترها را می توان با دادن دو کاراکتر و جدا کردن با یک نشان داد '-' , مثلا [الف] با هر حرف کوچک اسکی مطابقت دارد, [0-5][0-9] با تمام اعداد دو رقمی از 00 تا 59 مطابقت دارد , و [0-9 الف-فا-اف] با هر رقم هگزادسیمال مطابقت دارد. یا اگر به عنوان اولین یا اخرین شخصیت (به عنوان مثال [- ] یا [ -]) قرار گیرد با یک الف مطابقت دارد '-' .
شخصیت های خاص معنای خاص خود را در داخل مجموعه ها از دست می دهند. به عنوان مثال [( + * )] با هر یک از شخصیت های تحت اللفظی مطابقت دارد '(' , '+' , '*' , یا')'.
کلاس های شخصیت مانند \ دبلیو یا \ثانیه (تعریف شده در زیر) نیز در داخل یک مجموعه پذیرفته می شوند, اگرچه شخصیت هایی که مطابقت دارند بستگی به این دارد که حالت اسکی یا محلی در حال اجرا باشد.
کاراکترهایی که در محدوده نیستند را می توان با تکمیل مجموعه مطابقت داد. اگر اولین کاراکتر مجموعه ' ^ ' باشد تمام کاراکترهایی که در مجموعه نیستند مطابقت خواهند داشت. مثلا, [^5] هر شخصیت به جز '5' مطابقت, و [ ^ ^ ] هر شخصیت به جز ' ^ ' مطابقت . ^ اگر اولین شخصیت مجموعه نباشد معنای خاصی ندارد.
برای مطابقت با یک'] ' در داخل یک مجموعه, قبل از بک اسلش, یا در ابتدای ست قرار دهید. به عنوان مثال هر دو [() [\]<>] و [] () [<>] هر دو با یک پرانتز مطابقت دارند.
پشتیبانی از مجموعه های تو در تو و عملیات مجموعه مانند استاندارد فنی یونیکد شماره 18 ممکن است بعدا اضافه شود. این امر نحو را تغییر می دهد تا برای تسهیل این تغییر اخطار بعدی در حال حاضر در موارد مبهم مطرح شود. این شامل مجموعه هایی است که با یک '[' تحت اللفظی یا حاوی توالی شخصیت های تحت اللفظی شروع می شوند '--' , '&&' , '~~', و'||'. برای جلوگیری از اخطار با بک اسلش فرار کنید.
تغییر در نسخه 3.7: اخطار بعدی در صورتی مطرح می شود که مجموعه کاراکترها شامل ساختارهایی باشد که به صورت معنایی تغییر خواهند کرد.
الف / ب, جایی که الف و ب می تواند وضوح دلخواه باشد, یک عبارت منظم ایجاد می کند که با الف یا ب مطابقت دارد . تعداد دلخواه از وضوح را می توان با '|' در این راه از هم جدا. این را می توان در داخل گروه ها نیز استفاده کرد (به زیر مراجعه کنید). به عنوان رشته هدف اسکن شده است, وضوح از هم جدا شده توسط ' | ' از چپ به راست سعی. هنگامی که یک الگوی کاملا منطبق, که شاخه پذیرفته شده است. این به این معنی است که یک بار در مسابقات, ب نمی خواهد تست شده بیشتر, حتی اگر یک بازی به طور کلی دیگر تولید. به عبارت دیگر اپراتور ' | ' هرگز حریص نیست. برای مطابقت با یک تحت اللفظی'|', استفاده\/, و یا محصور در داخل یک کلاس شخصیت, در [ | ].
مسابقات هر عبارت منظم است در داخل پرانتز, و نشان می دهد که شروع و پایان یک گروه; محتویات یک گروه را می توان بازیابی پس از یک مسابقه انجام شده است, و می تواند بعد در رشته با همسان \تعداد توالی خاص, در زیر توضیح داده. برای این کار باید از کلمات کلیدی استفاده کنید یا از یک کلاس کاراکتر استفاده کنید .
این نماد پسوند است (یک '?'زیر' ('معنی دار نیست در غیر این صورت). اولین شخصیت پس از '?'تعیین می کند که معنی و نحو بعدی سازه چیست. پسوند معمولا یک گروه جدید ایجاد کنید; (?پ) تنها استثنا در این قاعده است. در زیر برنامه های افزودنی پشتیبانی شده در حال حاضر وجود دارد.
(یک یا چند حرف از مجموعه 'الف', 'من',' من', ' من '''''ایکس'.) گروه مسابقات رشته خالی; حروف مجموعه ای از پرچم مربوطه: دوباره.(اسکی فقط تطبیق), دوباره.من (نادیده گرفتن مورد), دوباره.ل (محلی وابسته), دوباره.متر (چند خط), پاسخ.بازدید کنندگان (نقطه مسابقات تمام), دوباره.تو (تطبیق یونیکد), و دوباره.ایکس (طولانی), برای کل عبارت منظم. (پرچم ها در محتویات ماژول شرح داده شده است .) این بسیار مفید است اگر شما مایل به شامل پرچم به عنوان بخشی از بیان منظم, به جای عبور از یک استدلال پرچم به دوباره.کامپایل () تابع. پرچم ها باید ابتدا در رشته بیان استفاده شوند.
تغییر در نسخه 3.11: این ساخت و ساز فقط در ابتدای عبارت قابل استفاده است.
یک نسخه غیر گرفتن از پرانتز به طور منظم. مسابقات هر عبارت منظم است در داخل پرانتز, اما زیر رشته همسان توسط گروه می تواند پس از انجام یک مسابقه نمی توان بازیابی و یا بعد در الگوی اشاره.
(صفر یا بیشتر حروف از مجموعه 'الف', 'من', 'من', ' م '' به صورت اختیاری دنبال می شود '-' به دنبال یک یا چند حرف از 'من' , 'م' , 'ایکس'.) حروف تنظیم و یا حذف پرچم مربوطه: دوباره.(اسکی فقط تطبیق), دوباره.من (نادیده گرفتن مورد), دوباره.ل (محلی وابسته), دوباره.متر (چند خط), پاسخ.بازدید کنندگان (نقطه مسابقات تمام), دوباره.تو (تطبیق یونیکد), و دوباره.ایکس (طولانی), برای بخشی از بیان. (پرچم ها در محتویات ماژول شرح داده شده است .)
حروف 'الف', 'و' تو 'وقتی به عنوان پرچم های درون خطی استفاده می شوند متقابلا منحصر به فرد هستند, بنابراین نمی توانند ترکیب شوند یا دنبال شوند' -'. بجای, وقتی یکی در یک گروه درون خطی ظاهر می شود, حالت تطبیق را در گروه محصور لغو می کند. در الگوهای یونیکد (?یک) کلید به اسکی فقط تطبیق, و (?به تطبیق یونیکد (پیش فرض) تغییر می کند. در الگوی بایت (?ل.) بسته به تطبیق به محلی تغییر می کند, و (?الف) به تطبیق فقط اسکی تغییر می کند (پیش فرض). این نادیده گرفتن تنها در اثر برای گروه های درون خطی باریک است, و حالت تطبیق اصلی در خارج از گروه ترمیم.
جدید در نسخه 3.6.
تغییر در نسخه 3.7: حروف 'الف', 'و' تو ' همچنین می تواند در یک گروه استفاده شود.
Attempts to match . as if it was a separate regular expression, and if successful, continues to match the rest of the pattern following it. If the subsequent pattern fails to match, the stack can only be unwound to a point before the (?>. ) because once exited, the expression, known as an atomic group , has thrown away all stack points within itself. Thus, (?>.*). هرگز هر چیزی مطابقت چرا که برای اولین بار .* دوست مطابقت با تمام شخصیت های ممکن, سپس, داشتن چیزی برای مطابقت, نهایی . در تطبیق ناکام می ماند. زیرا هیچ نقطه پشته ای در گروه اتمی ذخیره نشده است و هیچ نقطه پشته ای قبل از این وجود ندارد بنابراین کل عبارت مطابقت نخواهد داشت.
جدید در نسخه 3.11.
مشابه به پرانتز به طور منظم, اما زیر رشته همسان توسط گروه از طریق نام گروه نمادین نام قابل دسترسی است . نام گروه ها باید شناسه های پایتون معتبر باشند و هر نام گروه باید فقط یک بار در یک عبارت منظم تعریف شود. یک گروه نمادین نیز یک گروه شماره, فقط به عنوان اگر گروه بودند به نام نمی.
گروه های نامگذاری شده را می توان در سه زمینه ارجاع داد. اگر الگوی است (?پ ['"]).*?(?پ=نقل قول) (یعنی تطبیق یک رشته نقل شده با نقل قول های یک یا دو):