عبارات منظم در پایتون: re.match(), re.search(), re.findall() به همراه مثال

رتبه: 0 ار 0 رای sssss
عبارات منظم در پایتون
نویسنده: میلاد حیدری زمان مطالعه 9 دقیقه
Banner Image

عبارت منظم در زبان برنامه نویسی متن خاصی است که برای توصیف الگوی جستجو استفاده می شود. برای استخراج اطلاعات از متن مانند کد ، فایل ها ، گزارش ها ، صفحات گسترده یا حتی اسناد بسیار مفید است.

در عبارت منظم اولین چیزی که باید بفهمیم این است که همه چیز کاراکتر است و ما در حال نوشتن الگوهایی برای مطابقت با دنباله خاصی از کاراکترها به عنوان رشته می باشیم. حروف لاتین یا اسکی موارد روی صفحه کلیدند و از یونیکد برای مطابقت با متن خارجی استفاده می شود که شامل ارقام و علائم نگارشی و همه کاراکتر های خاص مانند $ # @ ! ٪ و غیره است.

در این آموزش می آموزیم:

  • ساختار عبارات منظم
  • مثال عبارت +w و ^
  • مثالی از عبارت s در تابع re.split
  • استفاده از متد های عبارت منظم
  • استفاده از re.match()
  • پیدا کردن الگو در متن (re.search())
  • استفاده از re.findall برای متن
  • پرچم های(flag) پایتون
  • مثال های re.M یا Multiline Flags

به عنوان مثال ، یک عبارت منظم می تواند به برنامه بگوید که متن خاصی را از رشته جستجو کند و سپس نتیجه را مطابق با آن چاپ کند. عبارت می تواند شامل موارد زیر باشد:

  • تطبیق متن
  • تکرار
  • شاخه ها
  • الگوی ترکیب و غیره

در پایتون ، یک عبارت منظم به عنوان RE(Res)، regexes یا regex pattern بیان می شود و از طریق ماژول re وارد می شود. پایتون از عبارت منظم از طریق کتابخانه پشتیبانی می کند. در پایتون عبارت منظم از چیزهای مختلفی مانند اصلاح کننده ها ، شناسه ها و کاراکتر های فضای سفید پشتیبانی می کند.

عبارت منظم در زبان برنامه نویسی

ساختار عبارت منظم

RE

import re

  • ماژول “re” در پایتون برای جستجوی رشته و دستکاری استفاده می شود.
  • همچنین اغلب برای صفحه “Scraping” استفاده می شود (استخراج مقدار زیادی داده از وب سایت ها).

آموزش را با این تمرین ساده با استفاده از عبارات (+w) و (^) شروع خواهیم کرد.

مثال عبارات +w و ^

  • “^”: این عبارت با شروع یک رشته مطابقت دارد.
  • “+w “: این عبارت با کاراکتر حرفی عددی در رشته مطابقت دارد.

در اینجا نمونه ای از چگونگی استفاده از عبارت +w و ^ را در کد مشاهده خواهیم کرد. بعداً در این آموزش تابع re.findall را پوشش می دهیم اما برای مدتی صرفاً روی عبارت +w و ^ تمرکز می کنیم.

به عنوان مثال ، برای رشته “guru99 ، اگر کد را با + w و ^ اجرا کنیم ، خروجی “guru99” را می دهد.

ساختار عبارت منظم

import re

xx = “guru99,education is fun”

r1 = re.findall(r”^w+”,xx)

print(r1)

به یاد داشته باشید ، اگر علامت + را از +w بردارید ، خروجی تغییر خواهد کرد ، و فقط کاراکتر اول حرف اول ، یعنی [g] را مشخص می کند.

نمونه ای از عبارت در تابع re.split

“s”: این عبارت برای ایجاد فاصله در رشته استفاده می شود.

برای درک چگونگی عملکرد این عبارت منظم در پایتون ، با یک مثال ساده از تابع split شروع می کنیم. در مثال ، ما هر کلمه را با استفاده از تابع “re.split” تقسیم کرده و در همان زمان از عبارت s استفاده کرده ایم که اجازه می دهد هر کلمه را در رشته جداگانه تجزیه کند.

نمونه ای از عبارت در تابع re.split

هنگامی اجرای کد ، خروجی برابر است با [‘we’, ‘are’, ‘splitting’, ‘the’, ‘words’].

اکنون ، بگذارید ببینیم اگر “” را از s حذف کنید چه اتفاقی می افتد. حرف s در خروجی وجود ندارد ، زیرا را از رشته حذف کرده ایم ، و” s ” به عنوان یک کاراکتر معمولی ارزیابی می شود. بنابراین کلمات را در هر کجا که” s “در رشته پیدا کند تقسیم می کند.

نمونه ای از عبارت در تابع re.split

به همین ترتیب ، مجموعه عبارات منظم دیگری نیز در پایتون وجود دارد که می توانید به روش های مختلفی در پایتون از آن ها استفاده کنید مانند d ، D ، $ ، . ، b و غیره.

در اینجا کد کاملی وجود دارد

import re

xx = “guru99,education is fun”

r1 = re.findall(r”^w+”, xx)

print((re.split(r’s’,’we are splitting the words’)))

print((re.split(r’s’,’split the words’)))

در مرحله بعد ، انواع متد هایی که با عبارات منظم استفاده می شوند را خواهیم دید.

استفاده از متد های عبارت منظم

پکیج “re” متد های مختلفی را برای نمایش اجرای کوئری در رشته ورودی ارائه می دهد. متدی هایی که خواهیم دید:

  • re.match()
  • re.search()
  • re.findall()

توجه: براساس عبارات منظم ، پایتون دو عملیات متفاوت ارائه می دهد. متد match فقط ابتدای رشته را برای تطابق بررسی می کند ، در حالی که search هر جای رشته را برای تطابق بررسی می کند.

استفاده از()re.match

تابع match برای تطابق الگوی RE به رشته با flag های اختیاری استفاده می شود. در این متد ، عبارات ” + w ” و ” W” با کلمات شروع شده با حرف “g” و پس از آن مطابقت دارند ، هر چیزی که با “g” شروع نشده باشد مشخص نمی شود. برای بررسی تطابق برای هر عنصر موجود در لیست یا رشته ، حلقه for را اجرا می کنیم.

استفاده از()re.match

پیدا کردن الگو در متن (()re.search)

یک عبارت منظم معمولاً برای جستجوی الگو در متن استفاده می شود. این متد از الگوی عبارت منظم و رشته استفاده می کند و آن الگو را در رشته جستجو می کند.

برای استفاده از تابع ()search ، ابتدا باید re را import کنید و سپس کد را اجرا کنید. تابع ()search از “الگو” و “متن” برای مطابقت در رشته اصلی استفاده می کند و در صورت یافتن الگو ، شیء تطابق داده شده را بر می گرداند و بلعکس.

پیدا کردن الگو در متن (()re.search)

برای مثال در اینجا به دنبال دو رشته ” Software testing” “guru99″ در متن ” Software Testing is fun” هستیم. برای ” Software testing” تطابق را پیدا کردیم از این رو خروجی ” found a match” را برمی گرداند ، در حالی که برای کلمه “guru99″ ما در رشته نتوانستیم تطابق پیدا کنیم از این رو خروجی ” No match” را برمی گرداند.

استفاده از re.findall برای متن

ماژول ()Re.findall وقتی می خواهید همه ی خطوط فایل تکرار شود ، استفاده می شود و لیستی از تمام تطابق ها را در یک مرحله برمی گرداند. به عنوان مثال ، در اینجا ما لیستی از آدرس های ایمیل را در اختیار داریم و می خواهیم همه آدرس های ایمیل از لیست خارج شوند ، از متد re.findall استفاده می کنیم. تمام آدرس های پست الکترونیکی را از لیست پیدا می کند.

استفاده از re.findall برای متن

کد کامل را در زیر می توانید ببینید:

import re

list = [“guru99 get”, “guru99 give”, “guru Selenium”]

for element in list:

z = re.match(“(gw+)W(gw+)”, element)

if z:

print((z.groups()))

patterns = [‘software testing’, ‘guru99’]

text = ‘software testing is fun?’

for pattern in patterns:

print(‘Looking for “%s” in “%s” ->’ % (pattern, text), end=’ ‘)

if re.search(pattern, text):

print(‘found a match!’)

else:

print(‘no match’)

abc = ‘guru99@google.com

, careerguru99@hotmail.com, users@yahoomail.com

emails = re.findall(r'[w.-]+@[w.-]+’, abc)

for email in emails:

print(email)

flag های پایتون

بسیاری از متد ها و توابع عبارات منظم پایتون یک آرگومان اختیاری به نام flag دارند که می توانند معنای الگوی داده شده عبارت منظم را تغییر دهند. برای درک بهتر ، یک یا دو نمونه از آن ها را مشاهده خواهیم کرد.

Flag های مختلفی در پایتون به کار رفته است از جمله:

flag های پایتون

مثالی از re.M یا Multiline Flags

در چند خطی ها الگوی کاراکتر [^] با کاراکتر اول رشته و ابتدای هر خط مطابقت دارد (تطابق بلافاصله بعد از هر خط جدید). عبارت “w” برای علامت گذاری فضای خالی با کاراکترها استفاده می شود. هنگامی که کد را اجرا می کنید ، اولین متغیر “k1” فقط کاراکتر “g” را برای کلمه guru99 چاپ می کند ، در حالی که وقتی Flag چند خطی را اضافه می کنید ، اولین کاراکترهای همه عناصر موجود در رشته را واکشی می کند.

مثالی از re.M یا Multiline Flags

import re

xx = “””guru99

careerguru99

selenium”””

k1 = re.findall(r”^w”, xx)

k2 = re.findall(r”^w”, xx, re.MULTILINE)

print(k1)

print(k2)

  • ما متغیر xx را برای رشته ” guru99…. careerguru99….selenium” تعریف کردیم.
  • کد را بدون استفاده از flags multiline اجرا کنید ، فقط “g” را به خروجی می دهد.
  • کد را با پرچم “multiline” اجرا کنید ، وقتی “k2” را چاپ می کنید ، خروجی را به صورت “” g، c “” و “s” می دهد.
  • بنابراین ، تفاوت را می توانیم بعد و قبل از اضافه کردن flags multiline در مثال بالا مشاهده کنیم.

به همین ترتیب ، می توانید از flag های دیگر پایتون نیز مانند re.U (یونیکد) ، re.L (دنبال کردن محل) ، re.X (مجاز کردن نظر) و غیره استفاده کنید.

مثال پایتون ۲

در بالا کدها مثال های پایتون ۳ هستند ، اگر می خواهید در پایتون ۲ اجرا کنید ، لطفا کد زیر را در نظر بگیرید.

# Example of w+ and ^ Expression

import re

xx = “guru99,education is fun”

r1 = re.findall(r”^w+”,xx)

print r1

# Example of s expression in re.split function

import re

xx = “guru99,education is fun”

r1 = re.findall(r”^w+”, xx)

print (re.split(r’s’,’we are splitting the words’))

print (re.split(r’s’,’split the words’))

# Using re.findall for text

import re

list = [“guru99 get”, “guru99 give”, “guru Selenium”]

for element in list:

z = re.match(“(gw+)W(gw+)”, element)

if z:

print(z.groups())

patterns = [‘software testing’, ‘guru99’]

text = ‘software testing is fun?’

for pattern in patterns:

print ‘Looking for “%s” in “%s” ->’ % (pattern, text),

if re.search(pattern, text):

print ‘found a match!’

else:

print ‘no match’

abc = ‘guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com

emails = re.findall(r'[w.-]+@[w.-]+’, abc)

for email in emails:

print email

# Example of re.M or Multiline Flags

import re

xx = “””guru99

careerguru99

selenium”””

k1 = re.findall(r”^w”, xx)

k2 = re.findall(r”^w”, xx, re.MULTILINE)

print k1

print k2

خلاصه:

عبارت منظم در زبان برنامه نویسی متن خاصی است که برای توصیف الگوی جستجو استفاده می شود که شامل رقم ها و علائم نگارشی و همه کاراکتر های خاص مانند $ # @ ! ٪ ، و غیره است. عبارت می تواند شامل موارد زیر باشد:

  • تطبیق متن
  • تکرار
  • شاخه ها
  • الگوی ترکیب و غیره

در پایتون ، یک عبارت منظم به عنوان (RE(Res، regexes یا regex pattern بیان می شود و از طریق ماژول re وارد می شود..

  • ماژول “re” در پایتون برای جستجوی رشته و دستکاری استفاده می شود.
  • همچنین اغلب برای صفحه “Scraping” استفاده می شود (استخراج مقدار زیادی داده از وب سایت ها).
  • متد های بیان منظم عبارتند از ()re.match () ، re.searchو ()re.findall
  • بسیاری از متد ها و توابع عبارات منظم پایتون یک آرگومان اختیاری به نام flag دارند.
  • flag ها می توانند معنای الگوی داده شده عبارت منظم را تغییر دهند.
  • flag های مختلف مورد استفاده در پایتون عبارتند از re.M ، re.I ، re.S و غیره.
profile name
میلاد حیدری

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

دیدگاهتان را بنویسید

1 2 3 4 5

0 نظر درباره «عبارات منظم در پایتون: re.match(), re.search(), re.findall() به همراه مثال»

    هنوز نظری برای این بخش ثبت نشده است
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید