از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
جایگزینی وقوع یک زیر رشته در رشته با پایتون
سرفصلهای مطلب
معرفی
جایگزین کردن همه یا n وقوع یک رشته فرعی در یک رشته معین یک مشکل نسبتاً رایج دستکاری رشته و پردازش متن به طور کلی است. خوشبختانه، اکثر این کارها در پایتون با مجموعه گسترده ای از توابع داخلی آن، از جمله این یکی، آسان می شوند.
فرض کنید یک رشته داریم که شامل جمله زیر است:
The brown-eyed man drives a brown car.
هدف ما جایگزینی کلمه است "brown"
با کلمه "blue"
:
The blue-eyed man drives a blue car.
در این مقاله، ما از replace()
عملکرد و همچنین sub()
و subn()
توابع با الگوهایی برای جایگزینی تمام رخدادهای یک رشته فرعی از یک رشته.
جایگزین کردن()
ساده ترین راه برای انجام این کار استفاده از تابع داخلی است – replace()
:
string.replace(oldStr, newStr, count)
دو پارامتر اول مورد نیاز است، در حالی که پارامتر سوم اختیاری است. oldStr
رشته فرعی است که می خواهیم با آن جایگزین کنیم newStr
. آنچه شایان ذکر است این است که تابع یک رشته جدید را با تبدیل انجام شده برمی گرداند، بدون اینکه روی رشته اصلی تاثیر بگذارد.
بیایید آن را امتحان کنیم:
string_a = "The brown-eyed man drives a brown car."
string_b = string_a.replace("brown", "blue")
print(string_a)
print(string_b)
ما عمل را انجام داده ایم روی string_a
، نتیجه را در بسته بندی کرد string_b
و هر دو را چاپ کرد.
این کد نتیجه می دهد:
The brown-eyed man drives a brown car.
The blue-eyed man drives a blue car.
باز هم رشته در حافظه که string_a
اشاره به بدون تغییر باقی می ماند. رشته ها در پایتون تغییر ناپذیر هستند، به این معنی که شما نمی توانید یک رشته را تغییر دهید. با این حال، می توانید متغیر مرجع را دوباره به یک مقدار جدید اختصاص دهید.
برای انجام به ظاهر این عملیات درجا، ما به سادگی می توانیم دوباره اختصاص دهیم string_a
به خودش بعد از عمل:
string_a = string_a.replace("brown", "blue")
print(string_a)
در اینجا، رشته جدید تولید شده توسط replace()
روش به string_a
متغیر.
جایگزین کردن n وقوع یک رشته فرعی
حالا، اگر مایل به تغییر نباشیم چه؟ همه وقوع یک رشته فرعی؟ اگر بخواهیم اولی را جایگزین کنیم چه؟ n?
اینجاست که پارامتر سوم از replace()
تابع وارد می شود. نشان دهنده تعداد زیر رشته هایی است که قرار است جایگزین شوند. کد زیر فقط جایگزین اولین کلمه می شود "brown"
با کلمه "blue"
:
string_a = "The brown-eyed man drives a brown car."
string_a = string_a.replace("brown", "blue", 1)
print(string_a)
و این چاپ می کند:
The blue-eyed man drives a brown car.
به طور پیش فرض، سومین پارامتر برای تغییر همه رخدادها تنظیم شده است.
وقوع زیر رشته با عبارات منظم
برای تشدید بیشتر مشکل، فرض کنید میخواهیم نه تنها همه رخدادهای یک زیررشته خاص را جایگزین کنیم، بلکه میخواهیم همه زیررشتههایی را جایگزین کنیم که با یک الگوی خاص مطابقت دارند. حتی این را می توان با یک خط، با استفاده از عبارات منظم و کتابخانه استاندارد انجام داد re
مدول.
عبارات منظم یک موضوع پیچیده با طیف گسترده ای از کاربرد در علوم کامپیوتر است، بنابراین در این مقاله زیاد به عمق نخواهیم پرداخت، اما اگر به یک شروع سریع نیاز دارید، می توانید راهنمای ما را بررسی کنید. روی عبارات منظم در پایتون
در اصل، یک عبارت منظم یک الگو را تعریف می کند. به عنوان مثال، فرض کنید متنی در مورد افرادی داریم که سگ و گربه دارند و می خواهیم هر دو عبارت را با کلمه تغییر دهیم. "pet"
. ابتدا باید الگویی را تعریف کنیم که با هر دو عبارت مطابقت داشته باشد مانند – (cat|dog)
.
با استفاده از زیر() تابع
با مرتبسازی الگو، از آن استفاده میکنیم re.sub()
تابعی که دستور زیر را دارد:
re.sub(pattern, repl, string, count, flags)
اولین آرگومان الگویی است که ما به دنبال آن هستیم (رشته یا a Pattern
هدف – شی)، repl
چیزی است که قرار است درج کنیم (می تواند یک رشته یا یک تابع باشد؛ اگر یک رشته باشد، هر بک اسلش در آن فرار می کند پردازش می شود) و string
رشته ای است که ما در آن جستجو می کنیم.
آرگومان های اختیاری هستند count
و flags
که نشان می دهد چند مورد باید جایگزین شود و پرچم ها استفاده می شوند process عبارت منظم، به ترتیب.
اگر الگو با هیچ زیر رشتهای مطابقت نداشته باشد، رشته اصلی بدون تغییر برگردانده میشود:
import re
string_a = re.sub(r'(cat|dog)', 'pet', "Mark owns a dog and Mary owns a cat.")
print(string_a)
این کد چاپ می کند:
Mark owns a pet and Mary owns a pet.
تطبیق الگوی غیر حساس به حروف کوچک و بزرگ
برای انجام تطبیق الگوی حساس به حروف کوچک، به عنوان مثال، پارامتر پرچم را روی آن تنظیم می کنیم re.IGNORECASE
:
import re
string_a = re.sub(r'(cats|dogs)', "Pets", "DoGs are a man's best friend", flags=re.IGNORECASE)
print(string_a)
در حال حاضر هر مورد-ترکیب از "dogs"
نیز گنجانده خواهد شد. هنگام تطبیق الگو با رشته های متعدد، برای جلوگیری از کپی کردن آن در چندین مکان، می توانیم a را تعریف کنیم Pattern
هدف – شی. آنها همچنین یک sub()
عملکرد با نحو:
Pattern.sub(repl, string, count)
استفاده کردن الگو اشیاء
بیایید a را تعریف کنیم Pattern
برای گربه ها و سگ ها و چند جمله را بررسی کنید:
import re
pattern = re.compile(r'(Cats|Dogs)')
string_a = pattern.sub("Pets", "Dogs are a man's best friend.")
string_b = pattern.sub("Animals", "Cats enjoy sleeping.")
print(string_a)
print(string_b)
که خروجی را به ما می دهد:
Pets are a man's best friend.
Animals enjoy sleeping.
این subn() تابع
یک نیز وجود دارد subn()
متد با نحو:
re.subn(pattern, repl, string, count, flags)
این subn()
تابع یک تاپل را با رشته و تعداد تطابق در رشته ای که جستجو کرده ایم برمی گرداند:
import re
string_a = re.subn(r'(cats|dogs)', 'Pets', "DoGs are a mans best friend", flags=re.IGNORECASE)
print(string_a)
تاپل به نظر می رسد:
('Pets are a mans best friend', 1)
آ Pattern
شی شامل یک مشابه است subn()
تابع:
Pattern.subn(repl, string, count)
و به روشی بسیار مشابه استفاده می شود:
import re
pattern = re.compile(r'(Cats|Dogs)')
string_a = pattern.subn("Pets", "Dogs are a man's best friend.")
string_b = pattern.subn("Animals", "Cats enjoy sleeping.")
print(string_a)
print(string_b)
این منجر به:
("Pets are a man's best friend.", 1)
('Animals enjoy sleeping.', 1)
نتیجه
پایتون توابع آسان و ساده ای را برای مدیریت رشته ارائه می دهد. ساده ترین راه برای جایگزینی همه رخدادهای یک زیررشته معین در یک رشته، استفاده از آن است replace()
تابع.
در صورت نیاز، کتابخانه استاندارد re
ماژول مجموعه ابزار متنوع تری را ارائه می دهد که می تواند برای مشکلات خاص مانند یافتن الگوها و جستجوهای حساس به حروف بزرگ استفاده شود.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-16 07:57:03