عبارات منظم re
عبارت منظم (Regex) چیست؟
- یک الگوی متنی برای جستجو، تطبیق یا استخراج بخشهایی از رشته
- در پایتون با ماژول
reکار میکنیم
import reتوابع اصلی ماژول re
| تابع | کار |
|---|---|
re.search() |
جستجوی اولین تطبیق در هر جای رشته |
re.match() |
بررسی تطبیق فقط از ابتدای رشته |
re.findall() |
برگرداندن لیست همه تطبیقها |
re.sub() |
جایگزینی بخشهای منطبق با متن دیگر |
re.split() |
تقسیم رشته بر اساس الگو |
مثال: search
text = "My email is ali@example.com"
result = re.search(r'\w+@\w+\.\w+', text)
print(result.group()) # ali@example.comr'...': raw string — همیشه برای regex استفاده بشه تا\اشتباه تفسیر نشه
نمادهای پرکاربرد در regex
| نماد | معنی |
|---|---|
\d |
یک رقم (0-9) |
\w |
یک کاراکتر حرفی/عددی یا _ |
\s |
فضای خالی (space, tab, …) |
. |
هر کاراکتری (بهجز خط جدید) |
* |
صفر یا بیشتر تکرار |
+ |
یک یا بیشتر تکرار |
? |
صفر یا یک بار (اختیاری) |
^ |
شروع رشته |
$ |
پایان رشته |
[] |
یکی از کاراکترهای داخل براکت |
{n,m} |
تکرار بین n تا m بار |
findall — استخراج همه موارد
text = "Numbers: 12, 45, 78"
numbers = re.findall(r'\d+', text)
print(numbers) # ['12', '45', '78']sub — جایگزینی
text = "Contact: 0912-1234567"
masked = re.sub(r'\d', '*', text)
print(masked) # Contact: ****-*******استخراج با گروه (())
text = "Name: Ali, Age: 25"
match = re.search(r'Name: (\w+), Age: (\d+)', text)
print(match.group(1)) # Ali
print(match.group(2)) # 25- هر پرانتز یک گروه جدا میسازه که بهصورت مستقل قابل دسترسیه
کامپایل کردن الگو (برای استفاده مکرر)
pattern = re.compile(r'\d+')
print(pattern.findall("a1 b22 c333"))- وقتی یک الگو رو چندبار قراره استفاده کنیم، کامپایل کردنش بهینهتره
نکته
- برای موارد ساده (مثل
startswith()،in) نیازی به regex نیست — regex برای الگوهای پیچیدهتر (مثل ایمیل، شماره تلفن، فرمت تاریخ) بهکار میره