نحوه حذف کاراکترها از رشته در پایتون

مقدمه
برای حذف کاراکترها از رشتهای در پایتون، باید رشته جدیدی بسازید؛ چون اشیای str Immutable هستند. از str.replace() برای یک کاراکتر یا زیررشته؛ از str.translate() یا str.maketrans() برای حذف چند کاراکتر در یک گذر؛ از re.sub() برای حذف مبتنی بر الگو؛ و از Slicing وقتی لازم است کاراکترها را در ابتدا، انتها یا Index مشخصی حذف کنید، استفاده کنید.
این tutorial هر رویکرد را با مثالهای قابل اجرا در کنسول تعاملی پایتون مرور میکند. برای پاکسازیِ فقط-Whitespace، راهنمای «حذف فاصلهها از رشته در پایتون» را ببینید.
اپلیکیشنهای پایتونیتان را از گیتهاب روی پلتفرم اپ پارمین کلود دیپلوی کنید و مقیاسپذیری و مدیریت زیرساخت را به پارمین کلود بسپارید.
نکات کلیدی
- رشتههای پایتون Immutable هستند: هر حذفی رشته جدیدی برمیگرداند؛ رشته اصلی بدون تغییر میماند.
- از
replace(old, '')برای یک کاراکتر یا زیررشته استفاده کنید؛ آرگومان سومی پاس بدهید تا تعداد جایگزینیها محدود شود. - از
translate()باstr.maketrans('', '', chars)یا Dict نگاشت برای حذف چند کاراکتر در یک گذر استفاده کنید. - از
re.sub()وقتی استفاده کنید که حذف به الگو وابسته است (ارقام، علائم نگارشی، غیر-ASCII). - از Slicing یعنی (
s[1:]،s[:-1]،s[:i] + s[i+1:]) برای حذف اولین، آخرین یا کاراکتر Index-شده—بدون اسکن کل رشته—استفاده کنید. strip()،lstrip()وrstrip()کاراکترهای ابتدایی یا انتهایی (اغلب Whitespace) را حذف میکنند؛ نه کاراکترهای دلخواه در وسط.- لیستها
remove()دارند؛ رشتهها نه—صدا زدنremove()روی رشته، AttributeError پرتاب میکند.
نحوه انتخاب روش حذف
| روش | مناسب برای | محدودیت |
|---|---|---|
| replace() | یک کاراکتر یا زیررشته؛ Literalهای ساده | چند کاراکتر مختلف، فراخوانیهای زنجیرهای یا حلقه لازم دارد |
| translate() / maketrans() | چندین کاراکتر متمایز همزمان | برای الگوهای پیچیده کمتر خواناست |
| re.sub() | ارقام، کلاسهای علائم نگارشی، قوانین Regex | برای یک Literal منفرد از replace() کندتر است |
| Slicing | حذف مبتنی بر اولین، آخرین یا Index | برای «حذف همهٔ aها» در سراسر رشته نیست |
| strip() / lstrip() / rstrip() | آشغالهای ابتدا یا انتها (فاصلهها، n) | به کاراکترهای وسط دست نمیزند |
حذف کاراکترها با replace()
str.replace() کپیای از رشته را—which هر مورد از آرگومان اول با آرگومان دوم جایگزین شده—برمیگرداند. رشته خالی را بهعنوان آرگومان دوم پاس بدهید تا موارد مطابقت حذف شوند.
رشته نمونهای تعریف کنید:
s = 'abc12321cba'
هر a را حذف کنید:
print(s.replace('a', ''))
خروجی:
Output
bc12321cb
هر دو کاراکتر a حذف شدهاند؛ رشته اصلی s همچنان ‘abc12321cba’ است.
حذف کاراکترهای خط جدید
s = 'ab\ncd\nef'
print(s.replace('\n', ''))
Output
abcdef
حذف یک زیررشته
print('Helloabc'.replace('Hello', ''))
Output
abc
محدود کردن تعداد جایگزینیها
آرگومان اختیاری سوم، جایگزینیها را محدود میکند:
print('abababab'.replace('a', 'A', 2))
Output
AbAbabab
فقط دو کاراکتر a اول تغییر میکنند. برای جزئیات بیشتر، راهنمای «متد replace() رشته در پایتون» را در پارمین کلود ببینید.
حذف کاراکترها با translate()
str.translate() هر کاراکتر را—from طریق جدولی—نگاشت میکند. کاراکترهای ناخواسته را به None نگاشت کنید (یا از str.maketrans با مجموعه حذف استفاده کنید) تا حذف شوند.
هر b را حذف کنید:
s = 'abc12321cba'
print(s.translate({ord('b'): None}))
Output
ac12321ca
حذف چند کاراکتر در یک فراخوانی
print(s.translate({ord(i): None for i in 'abc'}))
Output
12321
همین Idiom برای خطهای جدید هم کار میکند:
print('ab\ncd\nef'.translate({ord('\n'): None}))
Output
abcdef
str.maketrans('', '', ',!') جدولِ فقط-حذفی میسازد که اغلب از Dict Comprehension خواناتر است:
string = "Hello, World!"
print(string.translate(str.maketrans("", "", ",!")))
# Hello World
حذف کاراکترها با عبارات باقاعده
re.sub() وقتی میخشد که قانون، الگویی باشد—not Literal ثابتی. اول re را Import کنید.
حذف ارقام
import re
text = "Hello123 World456"
print(re.sub(r'\d+', '', text))
# Hello World
حذف کاراکترهای غیر-الفبایی-عددی
print(re.sub(r'[^a-zA-Z0-9]', '', "Hello, World! 123"))
# HelloWorld123
حذف کاراکترهای غیر-ASCII
raw = 'Café résumé'
print(re.sub(r'[^\x00-\x7F]+', '', raw))
# Caf rsum
برای راهنمای متمرکز روی سینتکس الگو، «عبارات باقاعده پایتون» را در پارمین کلود ببینید.
حذف کاراکترها با Slicing و Comprehension
Slicing کاراکترها را بر اساس موقعیت—بدون جستجوی کل رشته—حذف میکند:
s = "Hello, World!"
print(s[1:]) # ello, World! — حذف اولین کاراکتر
print(s[:-1]) # Hello, World — حذف آخرین کاراکتر
i = 4
print(s[:i] + s[i+1:]) # Hell, World! — حذف کاراکتر در index یعنی i
List Comprehension (یا Generator درون join) کاراکترها را فیلتر میکند:
vowels = 'aeiouAEIOU'
print(''.join(c for c in 'hello world' if c not in vowels))
# hll wrld
کارایی روی رشتههای بزرگ
در رشته تستی یک-میلیون-کاراکتری (پایتون 3.12، اجرای محلی)، زمانبندیهای تقریبی این بود:
| کار | سریعترین رویکرد |
|---|---|
| حذف یک کاراکتر تکرارشونده | replace() |
| حذف چند کاراکتر مختلف | translate() یا یک re.sub('[abc]', '') |
| پاکسازی مبتنی-بر-الگو | re.sub() |
زنجیر کردن چند فراخوانی replace() روی رشتههای عظیم، هزینه بیشتری از یک translate() یا Regex منفرد دارد. برای رشتههای معمول اپلیکیشن، هر یک از این روشها بهقدر کافی سریع است—فقط وقتی Profile بگیرید که مگابایتها داده بهازای هر درخواست پردازش میکنید.
حذف کاراکترهای ناخواسته در ستونهای Pandas
در رودهای کاری داده، متدهای رشته را بهازای هر ستون اعمال کنید.
نگه داشتن فقط ارقام با .str.extract() و گروه Capture:
import pandas as pd
df = pd.DataFrame({'strings': ['123abc', '456def', '789ghi']})
df['strings'] = df['strings'].str.extract(r'(\d+)')[0]
print(df)
فیلتر سفارشی با .apply():
def remove_vowels(text):
vowels = 'aeiouAEIOU'
return ''.join(c for c in text if c not in vowels)
df = pd.DataFrame({'strings': ['hello world', 'python is fun']})
df['strings'] = df['strings'].apply(remove_vowels)
برای عملیاتهای رشتهای DataFrame گستردهتر، راهنمای ماژول Pandas را در پارمین کلود ببینید.
سوالات متداول
۱. چطور کاراکتری را از رشته در پایتون حذف کنیم؟
replace() را با رشته جایگزینی خالی صدا بزنید:
text = "Hello, World!"
print(text.replace(",", ""))
# Hello World!
برای چند کاراکتر مختلف، translate() یا re.sub() را ترجیح بدهید تا دهها فراخوانی replace() را زنجیر نکنید.
۲. آیا متد remove() برای رشتهها در پایتون وجود دارد؟
نه. list.remove() آیتمی را از لیست حذف میکند؛ اما رشتهها متد remove() ندارند. استفاده از "abc".remove("a") باعث AttributeError میشود. برای رشتهها از replace()، translate()، re.sub() یا Slicing استفاده کنید.
۳. چطور کاراکتری را از رشته بر اساس Index حذف کنم؟
از Slicing برای رد کردن Index ناخواسته استفاده کنید:
s = "EXAMPLE"
i = 2 # حذف 'A' در index یعنی 2
print(s[:i] + s[i+1:])
# EXMPLE
برای حذف هر مورد از کاراکتری—فارغ از موقعیت—from replace() یا translate() استفاده کنید؛ نه Slicing مبتنی بر Index.
۴. strip() در پایتون چیست و چه وقت استفادهاش کنم؟
strip() کاراکترهای ابتدایی و انتهایی (پیشفرض: Whitespace) را حذف میکند. Variantهای lstrip() و rstrip() فقط یک سمت را Trim میکنند. این متدها کاراکترها را از وسط رشته حذف نمیکنند. بعد از خواندن خطوط از فایل از strip() استفاده کنید؛ وقتی خطهای جدید در هرجای متن ظاهر میشوند از replace('\n', '') یا translate() بهره ببرید.
۵. چطور چند کاراکتر را از رشته در پایتون حذف کنم؟
گزینه ۱ — translate() (یک گذر):
s = "a1b2c3"
print(s.translate(str.maketrans("", "", "abc")))
# 123
گزینه ۲ — re.sub() (الگو):
import re
print(re.sub(r'[abc]', '', s))
# 123
گزینه ۳ — حلقه با replace() (خوانا برای فهرست کوتاه):
for ch in "abc":
s = s.replace(ch, "")
برای دو یا سه کاراکتر، حلقه خوب است. برای مجموعههای حذف طولانیتر، translate() یا Regex معمولاً شفافتر بوده و روی ورودیهای بزرگ سریعتر است.
نتیجهگیری
میتوانید کاراکترها را از رشتههای پایتون با replace() برای Literalها، translate() برای دستههای کاراکتر، re.sub() برای الگوها و Slicing برای ویرایشهای موقعیتی حذف کنید. ابزاری را انتخاب کنید که با مجموعه قوانینتان مطابقت دارد؛ یادتان باشد رشتهها Immutable هستند؛ و مقدار جدید را به Caller برگردانید.




