د 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+', متن)  

# یا

>>> regex.split(متن)

محصول: ['100', 'INF', 'کمپیوټر ساینس', '213', 'MAT', 'ریاضی', '156', 'ENG', 'انګلیسي']

په عمومي توګه، دواړه میتودونه کارول کیدی شي. مګر دا واقعیا خورا اسانه ده چې د څو ځله فنکشن کارولو پرځای منظم بیان وکاروئ. بیا ویشل.

د دریو دندو سره د میچونو موندل

راځئ چې ووایو موږ اړتیا لرو یوازې د تار څخه شمیرې استخراج کړو. د دې لپاره څه باید وشي؟

re.findall()

دلته د فعالیت لپاره د کارولو قضیه ده findall()، کوم چې د منظم بیان سره یوځای تاسو ته اجازه درکوي د متن متغیر څخه د یو یا ډیرو شمیرو پیښې راوباسي.

>>> چاپ (متن)  

100 INF معلوماتي

213 MAT ریاضی  

156 ENG انګلیسي

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

>>> regex_num.findall(متن)  

['100', '213', '156']

د d سمبول سره یوځای، موږ یو ټیمپلیټ کارولی چې په متغیر یا متن کې واقع هر ډول عددي ارزښت په ګوته کوي. او له هغه ځایه چې موږ هلته یو + اضافه کړ، دا پدې مانا ده چې لږترلږه یو شمیر باید موجود وي. 

تاسو کولی شئ د * نښه هم وکاروئ ترڅو مشخص کړئ چې د میچ موندلو لپاره د عدد شتون اړین ندي.

مګر زموږ په قضیه کې، له هغه وخته چې موږ + کارولی، موږ یې استخراج کړو findall() د متن څخه د کورسونو 1 یا ډیر ډیجیټل ډیزاینونه. په دې توګه، زموږ په قضیه کې، منظم څرګندونې د فعالیت لپاره د ترتیباتو په توګه کار کوي.

re.search() vs بیا میچ()

لکه څنګه چې تاسو د دندو له نوم څخه اټکل کولی شئ، لومړی په متن کې د میچ لټون کوي. پوښتنه: تر منځ توپیر څه دی؟ موندل؟ ټکی دا دی چې دا یو ځانګړی څیز بیرته راګرځوي چې د نمونې سره سمون لري، نه د موندلو پایلو ټول ترتیب د لیست په بڼه، لکه د تیر فعالیت په څیر.

په بدل کې، د re.match فعالیت هم ورته کوي. یوازې ترکیب توپیر لري. ټیمپلیټ باید په پیل کې کیښودل شي. 

راځئ چې یو مثال واخلو چې دا څرګندوي.

>>> # د متن سره یو متغیر جوړ کړئ

>>> متن2 = «»» INF معلوماتي

213 MAT ریاضی 156″»»  

>>> # ریجیکس تالیف کړئ او نمونې وګورئ

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

>>> s = regex_num.search(text2)  

>>> چاپ('لومړی شاخص:'، s.start())  

>>> چاپ('وروستي شاخص:'، s.end())  

>>> چاپ(متن2[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('، متن))  

د پایلې په توګه، موږ یو کرښه لرو. 

101 COM کمپیوټر 205 MAT ریاضی 189 ENG انګلیسي

اوس یوه بله ستونزه په پام کې ونیسئ. موږ د ځای ایښودلو له دندې سره مخ نه یو. دا زموږ لپاره خورا مهم دی چې د کورس ټول نومونه په نوي کرښه پیل شي. د دې کولو لپاره، یو بل بیان کارول کیږي چې استثنا ته نوې کرښه اضافه کوي. دا څه ډول اظهار دی؟

کتابتون Re د یو ځانګړتیا ملاتړ کوي لکه منفي میچ کول. دا د مستقیم څخه توپیر لري چې پدې کې د سلیش څخه مخکې د عجب ټکي شتون لري. دا دی، که موږ د نوي کرښې کرکټر پریښودلو ته اړتیا ولرو، نو موږ باید د n پر ځای !n ولیکو.

موږ لاندې کوډ ترلاسه کوو.

# د نوي لاین پرته ټول ځایونه لرې کړئ  

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

>>> چاپ(regex.sub('، متن))  

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', 'ریاضی'), ('156', 'ENG', 'انګلیسي')]

د "لالچي" مطابقت مفهوم

د معیار سره سم، منظم بیانونه د ډیری میچ ډیټا راټولولو لپاره پروګرام شوي. او حتی که تاسو ډیر لږ ته اړتیا لرئ.

راځئ چې د نمونې HTML کوډ وګورو چیرې چې موږ د ټګ ترلاسه کولو ته اړتیا لرو.

>>> متن = "د لالچي منظم بیان میچ کولو بیلګه"  

>>> re.findall('', متن)  

['د لالچ منظم بیان میچ کولو بیلګه']

د دې پرځای چې یوازې یو ټاګ استخراج کړئ ، پایتون ټوله تار ترلاسه کړ. له همدې امله ورته لالچ ویل کیږي.

او یوازې د ټګ ترلاسه کولو لپاره څه وکړي؟ په دې حالت کې، تاسو اړتیا لرئ چې سست میچ وکاروئ. د دې ډول بیان مشخص کولو لپاره، د نمونې په پای کې د پوښتنې نښه اضافه کیږي.

تاسو به لاندې کوډ او د ژباړونکي محصول ترلاسه کړئ.

>>> re.findall('', متن)  

[”،”]

که دا اړینه وي چې یوازې د لومړي سره مخ شوي پیښې ترلاسه کړئ ، نو بیا میتود کارول کیږي لټون ().

بیا لټون(''، متن) ګروپ()  

"

بیا به یوازې د پرانیستلو ټګ وموندل شي.

د مشهور بیان ټیمپلیټونه

دلته یو جدول دی چې ترټولو عام کارول شوي منظم بیان نمونې لري.

د Python 3 لپاره د ری ماډل لپاره اسناد په . د منظم بیان لپاره بیا ماډل

پایله

موږ د منظم بیان سره د کار کولو لپاره یوازې ترټولو لومړني میتودونه په پام کې نیولي دي. په هرصورت، تاسو ولیدل چې دوی څومره مهم دي. او دلته دا هیڅ توپیر نلري چې ایا دا اړینه ده چې ټول متن یا د هغې انفرادي ټوټې پارس کړئ ، ایا دا اړینه ده چې په ټولنیز شبکه کې پوسټ تحلیل کړئ یا وروسته د پروسس کولو لپاره ډاټا راټول کړئ. منظم څرګندونې په دې مسله کې د باور وړ مرستندویه دي.

دوی تاسو ته اجازه درکوي چې دندې ترسره کړئ لکه:

  1. د معلوماتو بڼه مشخص کول، لکه د بریښنالیک پته یا د تلیفون شمیره.
  2. یو تار ترلاسه کول او په څو کوچنیو تارونو ویشل.
  3. د متن سره مختلف عملیات ترسره کړئ، لکه لټون کول، د اړینو معلوماتو استخراج، یا د کرکټرونو برخې بدلول.

منظم څرګندونې هم تاسو ته اجازه درکوي غیر معمولي عملیات ترسره کړئ. په لومړي نظر کې، د دې ساینس ماسټر کول اسانه ندي. مګر په عمل کې، هرڅه معیاري دي، نو دا کافي ده چې یو ځل یې معلومه کړئ، وروسته له دې چې دا وسیله نه یوازې په Python کې، بلکې په کوم بل پروګرامینګ ژبه کې هم کارول کیدی شي. حتی اکسل د معلوماتو پروسس کولو اتومات کولو لپاره منظم څرګندونې کاروي. نو دا ګناه ده چې دا وسیله ونه کارول شي.

یو ځواب ورکړئ ووځي