عبارات منظم در پایتون: re.match(), re.search(), re.findall() به همراه مثال
عبارت منظم در زبان برنامه نویسی متن خاصی است که برای توصیف الگوی جستجو استفاده می شود. برای استخراج اطلاعات از متن مانند کد ، فایل ها ، گزارش ها ، صفحات گسترده یا حتی اسناد بسیار مفید است.
در عبارت منظم اولین چیزی که باید بفهمیم این است که همه چیز کاراکتر است و ما در حال نوشتن الگوهایی برای مطابقت با دنباله خاصی از کاراکترها به عنوان رشته می باشیم. حروف لاتین یا اسکی موارد روی صفحه کلیدند و از یونیکد برای مطابقت با متن خارجی استفاده می شود که شامل ارقام و علائم نگارشی و همه کاراکتر های خاص مانند $ # @ ! ٪ و غیره است.
در این آموزش می آموزیم:
- ساختار عبارات منظم
- مثال عبارت +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 استفاده کرده ایم که اجازه می دهد هر کلمه را در رشته جداگانه تجزیه کند.
هنگامی اجرای کد ، خروجی برابر است با [‘we’, ‘are’, ‘splitting’, ‘the’, ‘words’].
اکنون ، بگذارید ببینیم اگر “” را از s حذف کنید چه اتفاقی می افتد. حرف s در خروجی وجود ندارد ، زیرا را از رشته حذف کرده ایم ، و” s ” به عنوان یک کاراکتر معمولی ارزیابی می شود. بنابراین کلمات را در هر کجا که” s “در رشته پیدا کند تقسیم می کند.
به همین ترتیب ، مجموعه عبارات منظم دیگری نیز در پایتون وجود دارد که می توانید به روش های مختلفی در پایتون از آن ها استفاده کنید مانند 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.search)
یک عبارت منظم معمولاً برای جستجوی الگو در متن استفاده می شود. این متد از الگوی عبارت منظم و رشته استفاده می کند و آن الگو را در رشته جستجو می کند.
برای استفاده از تابع ()search ، ابتدا باید re را import کنید و سپس کد را اجرا کنید. تابع ()search از “الگو” و “متن” برای مطابقت در رشته اصلی استفاده می کند و در صورت یافتن الگو ، شیء تطابق داده شده را بر می گرداند و بلعکس.
برای مثال در اینجا به دنبال دو رشته ” Software testing” “guru99″ در متن ” Software Testing is fun” هستیم. برای ” Software testing” تطابق را پیدا کردیم از این رو خروجی ” found a match” را برمی گرداند ، در حالی که برای کلمه “guru99″ ما در رشته نتوانستیم تطابق پیدا کنیم از این رو خروجی ” No match” را برمی گرداند.
استفاده از 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 های مختلفی در پایتون به کار رفته است از جمله:
مثالی از re.M یا Multiline Flags
در چند خطی ها الگوی کاراکتر [^] با کاراکتر اول رشته و ابتدای هر خط مطابقت دارد (تطابق بلافاصله بعد از هر خط جدید). عبارت “w” برای علامت گذاری فضای خالی با کاراکترها استفاده می شود. هنگامی که کد را اجرا می کنید ، اولین متغیر “k1” فقط کاراکتر “g” را برای کلمه guru99 چاپ می کند ، در حالی که وقتی Flag چند خطی را اضافه می کنید ، اولین کاراکترهای همه عناصر موجود در رشته را واکشی می کند.
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 و غیره.