پیچیدہ RegEx نحو کے بغیر پائیتھن سٹرنگ میچنگ

پیچیدہ RegEx نحو کے بغیر پائیتھن سٹرنگ میچنگ

ماخذ نوڈ: 1935271

پیچیدہ RegEx نحو کے بغیر پائیتھن سٹرنگ میچنگ
مصنف کی طرف سے تصویر
 

میرا باقاعدہ اظہار (RegEx) کے ساتھ محبت اور نفرت کا رشتہ ہے، خاص طور پر Python میں۔ مجھے پسند ہے کہ آپ ایک سے زیادہ منطقی فنکشن لکھے بغیر تاروں کو کیسے نکال سکتے ہیں یا میچ کر سکتے ہیں۔ یہ String سرچ فنکشن سے بھی بہتر ہے۔ 

مجھے جو چیز پسند نہیں وہ یہ ہے کہ میرے لیے RegEx پیٹرن کو سیکھنا اور سمجھنا کتنا مشکل ہے۔ میں سادہ سٹرنگ میچنگ سے نمٹ سکتا ہوں، جیسے کہ تمام الفا عددی حروف کو نکالنا اور NLP کاموں کے لیے متن کو صاف کرنا۔ فضول متن سے آئی پی ایڈریسز، ای میلز اور آئی ڈیز نکالنے کی بات آتی ہے تو چیزیں مشکل ہو جاتی ہیں۔ مطلوبہ شے کو نکالنے کے لیے آپ کو ایک پیچیدہ RegEx String پیٹرن لکھنا ہوگا۔ 

پیچیدہ RegEx کاموں کو آسان بنانے کے لیے، ہم ایک سادہ Python پیکیج کے بارے میں جانیں گے جسے کہا جاتا ہے۔ pregex. مزید برآں، ہم متن کی ایک لمبی تار سے تاریخیں اور ای میلز نکالنے کی چند مثالیں بھی دیکھیں گے۔  

Pregex ایک اعلیٰ سطح کا API ہے جسے `re` ماڈیول کے اوپر بنایا گیا ہے۔ یہ پیچیدہ RegEx پیٹرن کے بغیر ایک RegEx ہے جو کسی بھی پروگرامر کے لیے باقاعدہ تاثرات کو سمجھنا اور یاد رکھنا آسان بناتا ہے۔ مزید یہ کہ، آپ کو گروپ پیٹرن یا میٹا کریکٹرز سے بچنے کی ضرورت نہیں ہے، اور یہ ماڈیولر ہے۔ 

آپ PIP کا استعمال کرتے ہوئے لائبریری کو آسانی سے انسٹال کر سکتے ہیں۔

pip install pregex

 

PregEx کی طاقتور فعالیت کو جانچنے کے لیے، ہم سے ترمیم شدہ نمونہ کوڈ استعمال کریں گے۔ دستاویزات

ذیل کی مثال میں، ہم یا تو HTTP URL یا پورٹ نمبر کے ساتھ IPv4 پتہ نکال رہے ہیں۔ ہمیں اس کے لیے پیچیدہ منطق بنانے کی ضرورت نہیں ہے۔ ہم بلٹ ان فنکشنز `HttpUrl` اور `IPv4` استعمال کر سکتے ہیں۔

  1. AnyDigit() کا استعمال کرتے ہوئے ایک پورٹ نمبر بنائیں۔ پورٹ کا پہلا ہندسہ صفر نہیں ہونا چاہیے، اور اگلے تین ہندسے کوئی بھی نمبر ہو سکتے ہیں۔ 
  2. Either() کو نکالنے کے لیے متعدد لاجکس شامل کرنے کے لیے استعمال کریں، یا تو HTTP URL یا پورٹ نمبر کے ساتھ IP پتہ۔ 
from pregex.core.pre import Pregex
from pregex.core.classes import AnyDigit
from pregex.core.operators import Either
from pregex.meta.essentials import HttpUrl, IPv4 port_number = (AnyDigit() - '0') + 3 * AnyDigit() pre = Either( HttpUrl(capture_domain=True, is_extensible=True), IPv4(is_extensible=True) + ':' + port_number
)

 

ہم حروف اور وضاحت کے ساتھ متن کی ایک لمبی تار استعمال کریں گے۔ 

text = """IPV4--192.168.1.1:8000-- address--https://www.abid.works-- website--https://kdnuggets.com--text"""

 

اس سے پہلے کہ ہم مماثل سٹرنگ نکالیں، آئیے RegEx پیٹرن کو دیکھیں۔ 

regex_pattren = pre.get_pattern()
print(regex_pattren)

 

آؤٹ پٹ

جیسا کہ ہم دیکھ سکتے ہیں، یہ پڑھنا یا سمجھنا مشکل ہے کہ کیا ہو رہا ہے۔ یہ وہ جگہ ہے جہاں PregEx چمکتا ہے۔ پیچیدہ ریگولر ایکسپریشن کے کام انجام دینے کے لیے آپ کو انسان دوست API فراہم کرنے کے لیے۔ 

(?:https?://)?(?:www.)?(?:[a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z].)*([a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z]).[a-z]{2,6}(?::d{1,4})?(?:/[!-.0-~]+)*/?(?:(?=[!-/[-`{-~:-@])|(?=w))|(?:(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])).){3}(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])):[1-9]d{3}

 

بالکل `re.match` کی طرح، ہم مطلوبہ سٹرنگ نکالنے کے لئے `.get_matches(text)` استعمال کریں گے۔

results = pre.get_matches(text)
print(results)

 

آؤٹ پٹ

ہم نے پورٹ نمبر اور دو ویب یو آر ایل کے ساتھ آئی پی ایڈریس دونوں نکالے ہیں۔ 

['192.168.1.1:8000', 'https://www.abid.works', 'https://kdnuggets.com']

آئیے چند مثالوں کو دیکھتے ہیں جہاں ہم PregEx کی مکمل صلاحیت کو سمجھ سکتے ہیں۔ 

اس مثال میں، ہم نیچے دیے گئے متن سے مخصوص قسم کے تاریخ کے نمونے نکال رہے ہیں۔

text = """ 04-15-2023 2023-08-15 06-20-2023 06/24/2023 """

 

Exactly() اور AnyDigit() کا استعمال کرکے، ہم تاریخ کا دن، مہینہ اور سال بنائیں گے۔ دن اور مہینے کے دو ہندسے ہوتے ہیں جبکہ سال کے 4 ہندسے ہوتے ہیں۔ وہ "-" ڈیشز سے الگ ہوتے ہیں۔

پیٹرن بنانے کے بعد، ہم مماثل اسٹرنگ کو نکالنے کے لیے `get_match` چلائیں گے۔ 

from pregex.core.classes import AnyDigit
from pregex.core.quantifiers import Exactly day_or_month = Exactly(AnyDigit(), 2) year = Exactly(AnyDigit(), 4) pre = ( day_or_month + "-" + day_or_month + "-" + year
) results = pre.get_matches(text)
print(results)

 

آؤٹ پٹ

['04-15-2023', '06-20-2023']

 

آئیے `get_pattern()` فنکشن کا استعمال کرتے ہوئے RegEx پیٹرن کو دیکھتے ہیں۔ 

regex_pattren = pre.get_pattern()
print(regex_pattren)

 

آؤٹ پٹ

جیسا کہ ہم دیکھ سکتے ہیں، اس میں ایک سادہ RegEx نحو ہے۔ 

d{2}-d{2}-d{4}

دوسری مثال تھوڑی پیچیدہ ہے، جہاں ہم ردی متن سے درست ای میل ایڈریس نکالیں گے۔ 

text = """ user1@abid.works editorial@@kdnuggets.com lover@python.gg. editorial1@kdnuggets.com """

 

  • ایک تخلیق کریں صارف `OneOrMore()` کے ساتھ پیٹرن۔ ہم منطق سے "@" اور جگہ کو ہٹانے کے لیے `AnyButFrom()` کا استعمال کریں گے۔ 
  • ایک جیسے صارف پیٹرن ہم بناتے ہیں a کمپنی کے اضافی کریکٹر کو ہٹا کر پیٹرن "." منطق سے.
  • کے لئے ڈومین،  ہم `MatchAtLineEnd()` کا استعمال کریں گے تلاش شروع کرنے کے لیے کسی بھی دو یا زیادہ حروف کے ساتھ "@"، اسپیس اور فل اسٹاپ کے علاوہ۔  
  • حتمی پیٹرن بنانے کے لیے تینوں کو یکجا کریں: user@company.domain.
from pregex.core.classes import AnyButFrom
from pregex.core.quantifiers import OneOrMore, AtLeast
from pregex.core.assertions import MatchAtLineEnd user = OneOrMore(AnyButFrom("@", ' '))
company = OneOrMore(AnyButFrom("@", ' ', '.'))
domain = MatchAtLineEnd(AtLeast(AnyButFrom("@", ' ', '.'), 2)) pre = ( user + "@" + company + '.' + domain
) results = pre.get_matches(text)
print(results)

 

آؤٹ پٹ

جیسا کہ ہم دیکھ سکتے ہیں، PregEx نے دو درست ای میل ایڈریس کی نشاندہی کی ہے۔ 

['user1@abid.works', 'editorial1@kdnuggets.com']

 

نوٹ: دونوں کوڈ کی مثالیں کام کے تبدیل شدہ ورژن ہیں۔ پائی کوچ

اگر آپ ڈیٹا سائنسدان، تجزیہ کار، یا NLP کے شوقین ہیں، تو آپ کو متن کو صاف کرنے اور سادہ منطق تخلیق کرنے کے لیے PregEx کا استعمال کرنا چاہیے۔ یہ NLP فریم ورک پر آپ کا انحصار کم کر دے گا کیونکہ زیادہ تر میچنگ سادہ API کا استعمال کرتے ہوئے کی جا سکتی ہے۔ 

اس چھوٹے ٹیوٹوریل میں، ہم نے Python پیکیج PregEx اور اس کے استعمال کے کیسز کے بارے میں مثالوں کے ساتھ سیکھا ہے۔ آپ سرکاری پڑھ کر مزید جان سکتے ہیں۔ دستاویزات یا حل کرنا a ورڈیل قابل پروگرام ریگولر ایکسپریشنز کا استعمال کرتے ہوئے مسئلہ۔

 
 
عابد علی اعوان (@1abidaliawan) ایک سرٹیفائیڈ ڈیٹا سائنٹسٹ پروفیشنل ہے جو مشین لرننگ ماڈل بنانا پسند کرتا ہے۔ فی الحال، وہ مشین لرننگ اور ڈیٹا سائنس ٹیکنالوجیز پر مواد کی تخلیق اور تکنیکی بلاگ لکھنے پر توجہ دے رہا ہے۔ عابد کے پاس ٹیکنالوجی مینجمنٹ میں ماسٹر ڈگری اور ٹیلی کمیونیکیشن انجینئرنگ میں بیچلر ڈگری ہے۔ اس کا وژن دماغی بیماری کے ساتھ جدوجہد کرنے والے طلباء کے لیے گراف نیورل نیٹ ورک کا استعمال کرتے ہوئے ایک AI پروڈکٹ بنانا ہے۔
 

ٹائم اسٹیمپ:

سے زیادہ KDnuggets