پردازش متن

اصلاح شده

2026-07-25

اصل کلی: کِی regex و کِی متد رشته‌ای؟

موقعیت ابزار مناسب
بررسی ساده (شروع/پایان/شامل بودن) متدهای رشته‌ای (in، startswith())
الگوی پیچیده یا متغیر (ایمیل، شماره، تاریخ) re
جایگزینی ساده یک کلمه .replace()
جایگزینی بر اساس یک الگو re.sub()

مثال ۱: استخراج ایمیل‌ها از یک متن

import re

text = "تماس با ali@test.com یا sara.k@company.org"
emails = re.findall(r'[\w.]+@[\w.]+', text)
print(emails)
['ali@test.com', 'sara.k@company.org']

مثال ۲: اعتبارسنجی شماره موبایل ایرانی

import re

def is_valid_mobile(number):
    pattern = r'^09\d{9}$'
    return bool(re.match(pattern, number))

print(is_valid_mobile("09121234567"))   # True
print(is_valid_mobile("0912123456"))    # False (کوتاهه)

مثال ۳: پاک‌سازی متن ورودی کاربر

def clean_text(text):
    text = text.strip()                     # حذف فاصله اضافه
    text = re.sub(r'\s+', ' ', text)         # چند فاصله پشت سرهم -> یک فاصله
    text = re.sub(r'[^\w\s]', '', text)      # حذف علائم نگارشی
    return text

raw = "   سلام!!   دنیای    پایتون؟؟   "
print(clean_text(raw))
سلام دنیای پایتون

مثال ۴: شمارش کلمات یک متن

text = "پایتون زبان خوبی است. پایتون ساده است."
words = re.findall(r'\w+', text)
print(len(words))

from collections import Counter
print(Counter(words))

مثال ۵: استخراج اعداد از یک رشته و جمع کردن آن‌ها

text = "قیمت‌ها: 120, 45.5, 900"
numbers = re.findall(r'\d+\.?\d*', text)
numbers = [float(n) for n in numbers]
print(sum(numbers))

مثال ۶: تبدیل snake_case به camelCase (ترکیب split + join)

def to_camel_case(text):
    parts = text.split('_')
    return parts[0] + ''.join(p.title() for p in parts[1:])

print(to_camel_case("this_is_snake_case"))
thisIsSnakeCase

مثال ۷: بررسی معتبر بودن رمز عبور (ترکیب چند شرط با regex)

def is_strong_password(pw):
    if len(pw) < 8:
        return False
    if not re.search(r'[A-Z]', pw):     # حداقل یک حرف بزرگ
        return False
    if not re.search(r'\d', pw):        # حداقل یک عدد
        return False
    return True

print(is_strong_password("Abc12345"))   # True
print(is_strong_password("abc"))        # False

جمع‌بندی

  • تمرین اصلی این بخش: ترکیب split، join، replace با re.findall و re.sub برای حل مسائل واقعی پردازش متن — معمولاً راه‌حل نهایی از ترکیب چند تا از این ابزارها به‌دست میاد، نه فقط یکی