عبارات منظم (به انگلیسی: Regular Expressions یا به اختصار RegEx) یکی از ابزارهای قدرتمند در برنامهنویسی و پردازش متن به ویژه در زبان پایتون هستند. این ابزارها به برنامهنویسان این امکان را میدهند تا الگوهای خاصی را در متنها جستجو کرده، تطابق دیتا و اطلاعات را استخراج کنند. عبارات منظم ابزاری بسیار قدرتمند و چند منظوره هستند که در انواع وظایف از جمله جستجوی متن، تعویض کاراکترها، تجزیه و تحلیل اطلاعات، و اعتبارسنجی ورودیها مورد استفاده قرار میگیرند. در این مقاله عبارات منطم در پایتون را بررسی کرده و پیاده سازی آن را با چندین مثال انجام خواهیم داد.
مفهوم عبارات منظم در پایتون
عبارات منظم یک سری الگوها و نمادها هستند که برای تعریف الگوهای متنی خاص جهت جستجو و تطابق با متنها و رشتهها به کار میروند. این الگوها میتوانند شامل کاراکترها، اعداد، علائم خاصی نظیر نقطه و خط تیره(_) و… باشند. با استفاده از این الگوها میتوان الگوهای خاصی را در متنها شناسایی و به دادههای مورد نیاز دسترسی پیدا کرد.
کاربردهای عبارات منظم
عبارات منظم در پایتون در موارد زیادی کاربرد دارند. برخی از کاربردهای مهم عبارات منظم عبارتند از:
- جستجو و جایگزینی: با استفاده از عبارات منظم میتوانید الگوهای خاصی را در متنها جستجو و یا تغییر دهید. به عنوان مثال، جستجوی ایمیلها یا تعویض کلمات معین در یک متن.
- تجزیه و تحلیل داده: عبارات منظم به تجزیه و تحلیل دادههای متنی بسیار کمک میکنند. میتوانید از آنها برای استخراج اطلاعات از متنهای نظیر لاگها یا فایلهای متنی استفاده کنید.
- اعتبارسنجی ورودی: عبارات منظم برای اعتبارسنجی ورودیهای کاربر در برنامهها مفید هستند. میتوانید مثلاً ورودیهایی نظیر آدرس ایمیل یا شماره تلفن را بررسی کرده و اطمینان حاصل کنید که آنها به درستی وارد شدهاند.
- جستجوی و تطابق الگوها: عبارات منظم به شما امکان میدهند الگوهای خاصی را در متنها جستجو و تطابق دهید. این میتواند در برنامههای متنوعی مانند جستجوی و تغییرات دستهای، تجزیه و تحلیل داده، و استخراج اطلاعات از متنها مفید باشد.
- پردازش و تحلیل وب: عبارات منظم معمولاً در وبسایتها و وبسرویسها برای جستجو و استخراج اطلاعات از صفحات وب استفاده میشوند. میتوانید به راحتی از آنها برای جستجوی اطلاعات از صفحات وب، از جمله اخبار، مقالات، قیمتها، و غیره استفاده کنید.
شروع با عبارات منظم در پایتون
برای شروع با عبارات منظم در پایتون، ابتدا باید ماژول re
را وارد کنید. برای انجام این کار، از دستور زیر استفاده کنید:
import re
با وارد کردن ماژول re
، میتوانید عبارات منظم را تعریف کرده و از آنها برای جستجو، تطابق، تغییر و پردازش متنها و رشتهها استفاده کنید. حالا بیایید به مثالها و توضیحات بیشتری در مورد استفاده از عبارات منظم در پایتون بپردازیم.
تعریف الگو (Pattern)
در عبارات منظم، الگوها به عنوان الگوهای متنی تعریف میشوند که به جستجوی آنها در یک متن میگردیم. الگوها به وسیله کاراکترهای معمولی و کاراکترهای ویژه تعریف میشوند. به عنوان مثال، فرض کنید میخواهیم الگوی معتبری برای یک آدرس ایمیل تعریف کنیم. الگوی معتبر برای یک آدرس ایمیل میتواند به صورت زیر باشد:
email_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
در اینجا:
\b
تکهای از الگو به نام “کلمهی مرزی” است که نشاندهنده شروع یا پایان یک کلمه میباشد.[A-Za-z0-9._%+-]+
نماینده بخش اول آدرس ایمیل به شکل “نام کاربری” است که میتواند حاوی حروف انگلیسی بزرگ و کوچک، اعداد، و کاراکترهای خاص نظیر نقطه (.) و خط تیره(_) باشد.@
نماینده علامت اتصال “@” است که در آدرس ایمیل وجود دارد.[A-Za-z0-9.-]+
نماینده بخش دوم آدرس ایمیل به شکل “دامنه” است که نیز میتواند شامل حروف انگلیسی بزرگ و کوچک، اعداد، و نقطه (.) باشد.\.
نماینده نقطه است که در همه آدرسهای ایمیل وجود دارد.[A-Z|a-z]{2,7}
نماینده بخش آخر آدرس ایمیل است که حداکثر ۷ حرف از الفبای انگلیسی (بزرگ و کوچک) را شامل میشود.
تابع search
برای جستجوی الگو
تابع search
به ما اجازه میدهد تا از متن مورد نظر الگو را جستجو کنیم و اگر الگو پیدا شود، اطلاعات مربوط به آن را به ما برگرداند. اگر الگو پیدا نشود، این تابع None
را برمیگرداند.
مثال:
import re
text = "آدرس ایمیل من در این متن info@example.com است."
# تعریف الگوی آدرس ایمیل
email_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
# جستجوی الگو در متن
result = re.search(email_pattern, text)
if result:
print("آدرس ایمیل یافت شد: ", result.group())
else:
print("آدرس ایمیلی یافت نشد.")
در این مثال، ما یک متن داریم و میخواهیم آدرس ایمیل درون آن را پیدا کنیم. برای این کار، از تابع search
و الگوی تعریف شده برای آدرس ایمیل استفاده کردیم. اگر آدرس ایمیل پیدا شود ، ما از تابع result.group()
استفاده کرده و آدرس ایمیل را نمایش میدهیم. اگر آدرس ایمیل پیدا نشود، یک پیام مناسب چاپ میشود.
توابع و متدهای مرتبط با عبارات منظم
عبارات منظم دارای توابع و متدهای مفیدی برای انجام عملیاتهای پیچیده در متنها هستند. برخی از توابع و متدهای مورد استفاده عبارات منظم عبارتند از:
match()
: برای یافتن اولین تطابق الگو با رشته.findall()
: برای یافتن همه تطابقها در یک متن.finditer()
: برای یافتن همه تطابقها و بازگردانی آنها به صورت iterator.split()
: برای تقسیم یک متن بر اساس الگو.sub()
: برای تغییر و تعویض تطابقها در یک متن.compile()
: برای تعریف و ذخیره الگوها به صورت مجدد.
تعبیرات و کاراکترهای ویژه
عبارات منظم شامل مجموعهای از تعبیرات و کاراکترهای ویژه هستند که الگوها را تشکیل میدهند. برخی از این تعبیرات عبارتند از:
.
: نماینده هر کاراکتر به جز کاراکتر خط جدید (\n).*
: نماینده تکرار صفر یا بیشتر عبارت قبلی.+
: نماینده تکرار یک یا بیشتر عبارت قبلی.?
: نماینده تکرار صفر یا یک بار عبارت قبلی.[]
: نماینده مجموعه کاراکترهای مجاز برای یک موقعیت.|
: نماینده انتخاب بین دو الگو.()
: نماینده گروهبندی و ذخیره سازی یک بخش از الگو.\
: برای اتصال به کاراکترهای ویژه نظیر*
و+
.
مثال: تطابق شماره تلفن
برای مثال، فرض کنید میخواهیم شمارههای تلفن در متنی را پیدا کنیم. یک شماره تلفن معمولاً به فرمت “123-456-7890” یا “(123) 456-7890” ظاهر میشود. میتوانیم از یک الگوی منظم برای تطابق با این شمارهها استفاده کنیم:
import re
text = "شمارههای تماس: 123-456-7890 و (321) 654-0987 و 555-1234"
# تعریف الگوی شماره تلفن
phone_pattern = r'(\d{3}-\d{3}-\d{4}|\(\d{3}\) \d{3}-\d{4})'
# جستجوی شمارههای تلفن در متن
phone_numbers = re.findall(phone_pattern, text)
print("شمارههای تماس یافت شده:")
for phone in phone_numbers:
print(phone)
در این مثال، ما از تابع findall
برای یافتن تمام شمارههای تلفن در متن استفاده کردیم. الگو (\d{3}-\d{3}-\d{4}|\(\d{3}\) \d{3}-\d{4})
به ما اجازه میدهد تا شمارههای تلفن با هر دو فرمت پذیرفته شود.