برنامه نویسیبک اندپایتون

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

مقدمه

برای حذف کاراکترها از رشته‌ای در پایتون، باید رشته جدیدی بسازید؛ چون اشیای 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 برگردانید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا