📝 فصل ۱۶: کار با رشتهها و عبارات منظم (Strings & Regular Expressions)

۱۶.۱ چرا کار با رشتهها مهمه؟
تقریباً تو هر پروژهای، با دادههای متنی (رشتهای) سر و کار داریم: نام کاربر، ایمیل، متن پیام، خواندن فایل متنی، گرفتن داده از وب و…
پایتون ابزارهای قدرتمندی برای مدیریت و تغییر رشتهها (Strings) داره.
۱۶.۲ امکانات کلیدی رشتهها در پایتون
تعریف رشته:
name = "سلام پایتون"
یا:
multiline = """متن چند
خطی"""
الحاق (چسباندن)
first = "Hello"
second = "World"
result = first + " " + second # "Hello World"
فرمتدهی رشته
فرمت سنتی:
name = "رضا"
age = 22
sentence = "نام من %s و سنم %d است" % (name, age)
فرمت جدیدتر و پیشنهادشده:
sentence = f"نام من {name} و سنم {age} است"
تعداد، جایگزینی و پیدا کردن:
txt = "python python PYTHON"
print(txt.lower().count("python")) # چند بار اومده (کوچک و بزرگ فرقی نداره)
print(txt.replace("python", "java")) # جایگزینی رشته
print("py" in txt) # آیا وجود داره؟
print(txt.startswith("py")) # شروع شد؟
print(txt.endswith("ON")) # پایان یافت؟
برش (Slice)
mystr = "abcdef"
print(mystr[1:4]) # خروجی: 'bcd'
print(mystr[::-1]) # برعکس رشته
حذف فاصله اضافه:
s = " Ali "
print(s.strip()) # هم ابتدا و هم انتها رو حذف میکنه
print(s.lstrip())
print(s.rstrip())
۱۶.۳ Split و Join
برای تبدیل رشته به لیست و بالعکس:
names = "علی,مینا,سارا"
lst = names.split(",") # ['علی', 'مینا', 'سارا']
txt = "_".join(lst) # 'علی_مینا_سارا'
۱۶.۴ عبارات منظم (Regular Expressions)
ریجکس (Regex) چیه؟
عبارات منظم ابزاری هست برای جستجو، پیدا کردن یا استخراج الگوهای متنی خاص از رشتهها؛ مثلاً: ایمیل، شماره موبایل، کدملی، و…
ماژول re
برای کار با ریجکس، از ماژول re استفاده کن:
import re
pattern = r"\d+" # یک یا چند رقم (0-9)
result = re.findall(pattern, "علی 12 ساله است و سال 1402 به مدرسه رفت")
print(result) # ['12', '1402']
چند مثال کاربردی ریجکس
ایمیل:
txt = "لطفاً به info@gmail.com ایمیل بزنید."
pattern = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
emails = re.findall(pattern, txt)
print(emails) # ['info@gmail.com']
شماره موبایل (ایران):
txt = "شمارههای من: 09123456789 و 09351234567"
pattern = r"09\d{9}"
mobiles = re.findall(pattern, txt)
print(mobiles) # ['09123456789', '09351234567']
چک کردن کدملی:
code = "1234567890"
result = bool(re.match(r"\d{10}$", code))
print(result) # True یا False
جایگزین کردن (replace با ریجکس)
همه اعداد را ستاره کن:
s = "کد: 879 و شماره: 456"
result = re.sub(r"\d+", "***", s)
print(result) # کد: *** و شماره: ***
نکات حرفهای
- همیشه الگوها رو تست کن و مراقب اشتباهات باش.
- با
re.compileهم میتونی بارها از یک الگو استفاده کنی:python phone_pattern = re.compile(r"09\d{9}") print(phone_pattern.findall("09121234567, 09129876543")) - برای عبارات پیچیدهتر از سایت regex101.com کمک بگیر (الگوی پایتون انتخاب کن).
🟩 تمرین عملی
۱. یک برنامه بنویس که ایمیلهای موجود در یک متن رو شناسایی و چاپ کنه.
۲. یک برنامه که همه شمارههای موبایل ایرانی رو از متن استخراج کنه.