Python 3 ۾ ري ماڊل لاءِ دستاويزي دستاويز. باقاعده اظهار لاء ماڊل ٻيهر

باقاعده اظهار تقريبن ڪنهن به پروگرامنگ ٻولي جو هڪ تمام مشهور حصو آهن. اهي توهان کي گهربل معلومات تائين رسائي ۾ مدد ڪن ٿيون. خاص طور تي، اهي استعمال ڪيا ويندا آهن جڏهن متن کي پروسيس ڪرڻ ضروري آهي. Python ڊفالٽ طور هڪ خاص ماڊل سان گڏ اچي ٿو. re، جيڪو باقاعده اظهار سان ڪم ڪرڻ جو ذميوار آهي.

اڄ اسان تفصيل سان ڳالهائينداسين ته اهو عام طور تي ڇا آهي، انهن سان ڪيئن ڪم ڪجي ۽ ماڊل ڪيئن re مدد ڪندو.

باقاعده اظهار: هڪ تعارف

باقاعده اظهار جا استعمال ڇا آهن؟ لڳ ڀڳ سڀ. مثال طور، اهي:

  1. ويب ايپليڪيشنون جيڪي متن جي تصديق جي ضرورت هونديون آهن. ھڪڙو عام مثال آھي آن لائن ميل ڪلائنٽ.
  2. نصوص، ڊيٽابيسس وغيره سان لاڳاپيل ڪو ٻيو منصوبو.

ان کان اڳ جو اسين نحو کي پارس ڪرڻ شروع ڪريون، اسان کي لائبريري جي ڪم جي بنيادي اصولن کي وڌيڪ تفصيل سان سمجهڻ گهرجي. re ۽ عام طور تي، عام طور تي ان بابت ڇا سٺو آهي. اسان حقيقي عمل مان پڻ مثال ڏينداسين، جتي اسان انهن جي استعمال جي ميکانيزم کي بيان ڪنداسين. توهان هڪ اهڙي ٽيمپليٽ ٺاهي سگهو ٿا، جيڪو توهان لاء متن سان مختلف قسم جي عملن کي انجام ڏيڻ لاء مناسب آهي.

ري لائبريري ۾ ٽيمپليٽ ڇا آهي؟

ان سان گڏ، توهان مختلف قسمن جي معلومات ڳولي سگهو ٿا، انهن سان لاڳاپيل معلومات حاصل ڪري سگهو ٿا، ٻين ڪمن کي وڌيڪ سازگار بڻائڻ لاء. ۽، يقينا، هن ڊيٽا کي پروسيس ڪرڻ لاء.

مثال طور، ھيٺ ڏنل ٽيمپليٽ وٺو: s+. ان جو مطلب آهي ڪو به خلائي ڪردار. جيڪڏهن توهان ان ۾ هڪ پلس نشاني شامل ڪيو، ته پوء هن جو مطلب اهو آهي ته نموني ۾ هڪ کان وڌيڪ جاء شامل آهي. اهو شايد ٽيب اکرن سان پڻ ملائي سگھي ٿو جيڪي سڏيو وڃي ٿو t+.

انهن کي استعمال ڪرڻ کان پهريان، توهان کي لائبريري درآمد ڪرڻ جي ضرورت آهي Re. ان کان پوء، اسان ٽيمپليٽ کي گڏ ڪرڻ لاء خاص حڪم استعمال ڪندا آهيون. اهو ٻن مرحلن ۾ ڪيو ويندو آهي.

>>> ٻيهر درآمد ڪريو

>>> regex = re.compile('s+')

خاص طور تي، هي ڪوڊ هڪ ٽيمپليٽ گڏ ڪرڻ جو عمل انجام ڏئي ٿو جيڪو استعمال ڪري سگهجي ٿو. مثال طور، اسپيس ڳولڻ لاء (هڪ يا وڌيڪ).

باقاعده اظهار استعمال ڪندي مختلف تارن کان الڳ معلومات حاصل ڪرڻ

فرض ڪريو اسان وٽ ھڪڙو متغير آھي جنھن ۾ ھيٺ ڏنل معلومات آھي.

>>> ٽيڪسٽ = """100 INF انفارميٽڪس

213 MAT رياضي  

156 ENG انگريزي »»»

ان ۾ ٽي تربيتي ڪورس شامل آهن. انهن مان هر هڪ ٽن حصن تي مشتمل آهي - نمبر، ڪوڊ ۽ نالو. اسان ڏسون ٿا ته انهن لفظن جي وچ ۾ وقفو مختلف آهي. هن لڪير کي الڳ انگ ۽ لفظن ۾ ٽوڙڻ لاءِ ڇا ڪجي؟ هن مقصد کي حاصل ڪرڻ لاء ٻه طريقا آهن:

  1. هڪ فنڪشن سڏ ٻيهر ورهاڱو.
  2. فنڪشن لاڳو ڪريو تقسيم لاء ريجڪس.

هتي اسان جي متغير جي طريقن مان هر هڪ جي نحو کي استعمال ڪرڻ جو هڪ مثال آهي.

>>> re.split('s+', text)  

# يا

>>> regex.split(متن)

ٻاھر نڪتو: ['100'، 'INF'، 'ڪمپيوٽر سائنس'، '213'، 'MAT'، 'Math'، '156'، 'ENG'، 'انگريزي']

عام طور تي، ٻنهي طريقن کي استعمال ڪري سگهجي ٿو. پر اهو اصل ۾ گهڻو آسان آهي باقاعده اظهار کي استعمال ڪرڻ بجاءِ فنڪشن کي ڪيترائي ڀيرا استعمال ڪرڻ جي. ٻيهر ورهاڱو.

ٽن ڪمن سان ملندڙن کي ڳولڻ

اچو ته چئون ته اسان کي صرف انگن اکرن مان ڪڍڻ جي ضرورت آهي. ان لاءِ ڇا ڪرڻ جي ضرورت آهي؟

re.findall()

هتي فنڪشن لاء استعمال ڪيس آهي findall()، جيڪو، باقاعده اظهار سان گڏ، توهان کي متن جي متغير مان هڪ يا وڌيڪ انگن جي واقعن کي ڪڍڻ جي اجازت ڏئي ٿو.

>>> پرنٽ (ٽيڪسٽ)  

100 INF انفارميٽڪس

213 MAT رياضي  

156 ENG انگريزي

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(text)  

['100'، '213'، '156']

ڊي جي علامت سان گڏ، اسان هڪ ٽيمپليٽ استعمال ڪيو آهي جيڪو ظاهر ڪري ٿو بلڪل ڪنهن به عددي قدر جيڪو متغير يا متن ۾ واقع آهي. ۽ جيئن ته اسان هڪ + اتي شامل ڪيو، ان جو مطلب اهو آهي ته گهٽ ۾ گهٽ هڪ نمبر موجود هجڻ گهرجي. 

توھان پڻ استعمال ڪري سگھو ٿا * نشاني بيان ڪرڻ لاءِ ته ھڪڙي عدد جي موجودگي ضروري نه آھي ھڪڙي ميچ کي ڳولڻ لاءِ.

پر اسان جي صورت ۾، جيئن اسان استعمال ڪيو +، اسان سان گڏ ڪڍيو findall() متن مان ڪورسز جا 1 يا وڌيڪ ڊجيٽل ڊيزائن. اهڙيء طرح، اسان جي صورت ۾، باقاعده اظهار فنڪشن لاء سيٽنگون طور ڪم ڪن ٿا.

re.search() بمقابله re.match()

جئين توهان فنڪشن جي نالي مان اندازو لڳائي سگهو ٿا، پهرين ڳولها متن ۾ هڪ ميچ لاء. سوال: فرق ڇا آهي؟ ڳوليو نقطو اهو آهي ته اهو هڪ مخصوص اعتراض واپس ڪري ٿو جيڪو نموني سان ملندو آهي، ۽ نه ته مليل نتيجن جي پوري ترتيب هڪ فهرست جي صورت ۾، اڳئين فنڪشن وانگر.

موڙ ۾، re.match فنڪشن ساڳيو ڪندو آهي. صرف نحو مختلف آهي. ٽيمپليٽ کي شروع ۾ رکڻ گهرجي. 

اچو ته هڪ مثال وٺون جيڪو اهو ظاهر ڪري ٿو.

>>> # متن سان هڪ متغير ٺاهيو

>>> text2 = «»»INF انفارميٽڪس

213 MAT رياضي 156″»»  

>>> # مرتب ڪريو ريجڪس ۽ نمونن لاءِ ڏسو

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> پرنٽ ('پهريون انڊيڪس:'، s.start())  

>>> پرنٽ ('آخري انڊيڪس:'، s.end())  

>>> پرنٽ(text2[s.start():s.end()]) 

پهريون انڊيڪس: 17 

آخري انڊيڪس: 20

213

جيڪڏھن توھان چاھيو ٿا ساڳيو نتيجو مختلف طريقي سان، توھان استعمال ڪري سگھوٿا فنڪشن گروپ().

ري لائبريري سان متن جي حصي کي تبديل ڪرڻ

متن کي تبديل ڪرڻ لاء، فنڪشن استعمال ڪريو re.sub(). فرض ڪريو اسان جي ڪورسن جي فهرست ٿوري تبديل ٿي وئي آهي. اسان ڏسون ٿا ته هر ڊجيٽل قيمت کان پوء اسان وٽ هڪ ٽيب آهي. اسان جو ڪم اهو آهي ته هن سموري ترتيب کي هڪ قطار ۾ گڏ ڪيو وڃي. هن کي ڪرڻ لاء، اسان کي ايڪسپريس s + کي تبديل ڪرڻو پوندو پاس ڪرڻ 

اصل متن هو:

# متن سان متغير ٺاھيو

>>> ٽيڪسٽ = """100 INF t انفارميٽڪس

213 MAT t رياضي  

156 ENG t انگريزي »»»  

>>> پرنٽ (ٽيڪسٽ)  

100 ڄاڻ ڪمپيوٽر سائنس

213 MAT رياضيات  

156 ENG انگريزي

گهربل آپريشن ڪرڻ لاء، اسان ڪوڊ جون ھيٺيون لائينون استعمال ڪيون.

# 1 سان ھڪڙي يا وڌيڪ جڳھن کي تبديل ڪريو

>>> regex = re.compile('s+')  

>>> پرنٽ(regex.sub('', text))  

نتيجي طور، اسان وٽ ھڪڙو لڪير آھي. 

101 COM ڪمپيوٽر 205 MAT رياضي 189 ENG انگريزي

هاڻي هڪ ٻئي مسئلي تي غور ڪريو. اسان کي خلا رکڻ جي ڪم سان منهن نه آهي. اهو اسان لاءِ تمام گهڻو اهم آهي ته سڀني ڪورس جا نالا هڪ نئين لائن تي شروع ٿين ٿا. هن کي ڪرڻ لاء، هڪ ٻيو اظهار استعمال ڪيو ويندو آهي جيڪو استثنا ۾ نئين لائن شامل ڪري ٿو. هي ڪهڙي قسم جو اظهار آهي؟

لائبريري Re ھڪڙي خصوصيت کي سپورٽ ڪري ٿو جهڙوڪ منفي ميلاپ. اهو سڌو سنئون کان مختلف آهي جنهن ۾ ان ۾ سليش کان اڳ هڪ عجب واري نقطي شامل آهي. اهو آهي، جيڪڏهن اسان کي نئين لائن جي ڪردار کي ڇڏڻ جي ضرورت آهي، ته اسان کي n جي بدران !n لکڻ جي ضرورت آهي.

اسان هيٺ ڏنل ڪوڊ حاصل ڪندا آهيون.

# نئين لائين کان سواء سڀني جڳھن کي هٽايو  

>>> regex = re.compile('((?!n)s+)')  

>>> پرنٽ(regex.sub('', text))  

100 INF انفارميٽڪس

213 MAT رياضي  

156 ENG انگريزي

باقاعده اظهار گروپ ڇا آهن؟

باقاعده اظهار جي گروپن جي مدد سان، اسان گهربل شيون الڳ الڳ عناصر جي صورت ۾ حاصل ڪري سگهون ٿا، نه ته هڪ قطار ۾. 

فرض ڪريو اسان کي حاصل ڪرڻ جي ضرورت آهي ڪورس نمبر، ڪوڊ ۽ نالو هڪ لڪير ۾ نه، پر الڳ الڳ عناصر جي طور تي. ڪم کي مڪمل ڪرڻ لاء، توهان کي ڪوڊ جي غير ضروري لائنن جو وڏو تعداد لکڻ جي ضرورت پوندي. 

حقيقت ۾، ڪم تمام آسان ٿي سگهي ٿو. توھان سڀني داخلن لاءِ ٽيمپليٽ مرتب ڪري سگھو ٿا ۽ صرف ڊيٽا کي بيان ڪريو جيڪو توھان کي بریکٹ مان حاصل ڪرڻ جي ضرورت آھي.

لڪير جو تمام گهٽ تعداد هوندو. 

# ڪورس ٽيڪسٽ ٽيمپليٽس جا گروپ ٺاھيو ۽ انھن کي ڪڍو

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'ڪمپيوٽر سائنس'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'انگريزي')]

"لالچي" جي ميلاپ جو تصور

معياري طور تي، باقاعده اظهار کي پروگرام ڪيو ويو آهي ته وڌ ۾ وڌ مقدار جي ڊيٽا کي ڪڍڻ لاء. ۽ جيتوڻيڪ توهان کي تمام گهٽ ضرورت آهي.

اچو ته هڪ نموني HTML ڪوڊ ڏسو جتي اسان کي ٽيگ حاصل ڪرڻ جي ضرورت آهي.

>>> ٽيڪسٽ = "لالچ جي باقاعده اظهار جي ميلاپ جو مثال"  

>>> re.findall(', text)  

['لالچ جي باقاعده اظهار جي ميلاپ جو مثال']

صرف هڪ ٽيگ ڪڍڻ جي بدران، پٿون سڄي تار حاصل ڪئي. ان ڪري ان کي لالچ سڏيو ويندو آهي.

۽ صرف ٽيگ حاصل ڪرڻ لاء ڇا ڪجي؟ انهي حالت ۾، توهان کي سست ميلاپ استعمال ڪرڻ جي ضرورت آهي. اهڙي اظهار جي وضاحت ڪرڻ لاء، نموني جي آخر ۾ هڪ سوال جو نشان شامل ڪيو ويو آهي.

توھان ھيٺ ڏنل ڪوڊ حاصل ڪندا ۽ مترجم جو آئوٽ.

>>> re.findall(', text)  

[“،”]

جيڪڏهن اهو ضروري آهي ته صرف پهرين واقعن کي حاصل ڪرڻ لاء، پوء اهو طريقو استعمال ڪيو ويندو آهي ڳولا ().

re.search(', text).group()  

"

پوءِ فقط اوپننگ ٽيگ ملندو.

مشهور ايڪسپريس ٽيمپليٽس

هتي هڪ ٽيبل آهي جنهن ۾ سڀ کان وڌيڪ استعمال ٿيل باقاعده اظهار جي نمونن تي مشتمل آهي.

Python 3 ۾ ري ماڊل لاءِ دستاويزي دستاويز. باقاعده اظهار لاء ماڊل ٻيهر

ٿڪل

اسان باقاعده اظهار سان ڪم ڪرڻ لاء صرف بنيادي طريقن تي غور ڪيو آهي. ڪنهن به صورت ۾، توهان ڏٺو آهي ته اهي ڪيترا اهم آهن. ۽ هتي اهو فرق نٿو پوي ته ڇا اهو ضروري آهي ته پوري متن يا ان جي انفرادي ٽڪرن کي پارس ڪرڻ ضروري آهي، ڇا اهو ضروري آهي ته سماجي نيٽ ورڪ تي پوسٽ جو تجزيو ڪرڻ يا بعد ۾ پروسيس ڪرڻ لاء ڊيٽا گڏ ڪرڻ. باقاعده اظهار هن معاملي ۾ هڪ قابل اعتماد مددگار آهن.

اهي توهان کي ڪم ڪرڻ جي اجازت ڏين ٿا جهڙوڪ:

  1. ڊيٽا جي فارميٽ کي بيان ڪرڻ، جهڙوڪ اي ميل پتو يا فون نمبر.
  2. هڪ تار حاصل ڪرڻ ۽ ان کي ڪيترن ئي ننڍن تارن ۾ ورهائڻ.
  3. متن سان مختلف عملن کي انجام ڏيو، جهڙوڪ ڳولهڻ، ضروري معلومات ڪڍڻ، يا ڪردارن جو حصو مٽائڻ.

باقاعده اظهار پڻ توهان کي غير معمولي آپريشن ڪرڻ جي اجازت ڏين ٿا. پهرين نظر ۾، هن سائنس کي ماهر ڪرڻ آسان ناهي. پر عملي طور تي، سڀڪنھن شيء کي معياري آهي، پوء ان کي هڪ ڀيرو معلوم ڪرڻ لاء ڪافي آهي، جنهن کان پوء هن اوزار استعمال ڪري سگهجي ٿو نه رڳو Python ۾، پر پڻ ڪنهن ٻئي پروگرامنگ ٻولي ۾. جيتوڻيڪ Excel ڊيٽا پروسيسنگ کي خودڪار ڪرڻ لاء باقاعده اظهار استعمال ڪري ٿو. تنهن ڪري هن اوزار کي استعمال نه ڪرڻ گناهه آهي.

جواب ڇڏي وڃو