من بين المهام العديدة التي قد تواجهها عند التعامل مع السلاسل النصية في بايثون هي إزالة أحرف معينة من السلسلة – في هذه الحالة، الفواصل.
يمكن العثور على الفواصل في العديد من السياقات، مثل ملفات CSV وعلى الرغم من أنها تخدم غرضًا مفيدًا، إلا أن هناك حالات يمكن أن تكون فيها غير ملائمة.
في هذه المقالة، سنستكشف ثلاثة حلول فعالة لإزالة الفواصل من سلسلة في بايثون – replace()
, translate()
و maketrans()
والتعبيرات القياسية.
سنستعرض أمثلة لكل منها، ونناقش مزاياها، ونأخذ في الاعتبار حالات الاستخدام المتقدمة.
إستخدام التابع ()replace
تعد replace()
تابع السلسلة المدمج في بايثون دالة سهلة الاستخدام لإزالة الأحرف من السلسلة.
يستبدل التابع replace()
عبارة محددة بعبارة أخرى محددة، وهي مناسبة تمامًا لمشكلتنا:
s = "H,e,l,l,o, W,o,r,l,d"
s = s.replace(",", "")
print(s)
وستكون النتيجة :
Hello World
في الكود السابق، قمنا بإستخدام التابعreplace()
على السلسلة s
. و يأخذ التابع وسيطتين – الحرف الذي سيتم استبداله (فاصلة في حالتنا) والحرف الذي سيتم استبداله به (سلسلة فارغة، لأننا نريد إزالة الفواصل).
ملحوظة: لا يغير تابع replace()
السلسلة الأصلية. بدلاً من ذلك، تقوم بإرجاع سلسلة جديدة. ومن ثم، فإننا نعيد تعيين السلسلة الجديدة إلى s.
على الرغم من أن تابعreplace()
هي طريقة بسيطة ومباشرة، إلا أنها تعمل بشكل جيد فقط عندما يكون النمط معروفًا وبسيطًا. ولا توفر مرونة كبيرة للحالات المعقدة، والتي سنغطيها في الحلول اللاحقة.
إستخدام تابع كل من ()translate و ()maketrans.
توفر كل من طرق السلسلة المدمجة في بايثونtranslate()
وmaketrans()
طريقة أخرى لإزالة الأحرف من السلسلة.
يقوم التابعmaketrans()
بإعادة جدول تحويل يمكن استخدامه بواسطة التابع str.translate()
. لاستبدال الأحرف المحددة.
دعونا نستخدم نفس السلسلة السابقة كمثال:
s = "H,e,l,l,o, W,o,r,l,d"
لاستبدال جميع الفواصل من s
نحتاج أولاً إلى استدعاء التابعmaketrans()
على السلسلة s
:
table = s.maketrans(",", "")
يأخذ هذا التابع وسيطتين – قائمة الأحرف التي سيتم استبدالها وقائمة الأحرف التي سيتم استبدالها بها.
في هذا المثال نستبدل الفواصل بسلسلة فارغة، وبالتالي السلسلة الفارغة هي الوسيطة الثانية. تقوم طريقةmaketrans()
بإرجاع جدول تحويل.
بعد ذلك، نستدعي التابعtranslate()
على السلسلة النصية، ونمرر جدول التحويل كوسيطة.
يستخدم هذا التابع الجدول لاستبدال الأحرف المحددة في السلسلة:
s = s.translate(table)
في النهاية، يجب أن يبدو الكود الخاص بنا كما يلي:
s = "H,e,l,l,o, W,o,r,l,d"
# Creating translation table
table = s.maketrans(",", "")
# Removing commas from the string
s = s.translate(table)
print(s)
Hello World
إستخدام التعابيرالقياسية (وحدة re)
تسمح وحدة re
المدمجة في Python بمعالجة مرنة للسلاسل باستخدام التعابير القياسية، وهي عبارة عن سلاسل نصية خاصة لوصف نمط البحث وهي مفيدة بشكل خاص في السيناريوهات الأكثر تعقيدًا.
import re
s = "H,e,l,l,o, W,o,r,l,d"
s = re.sub(",", "", s)
print(s)
Hello World
في الكود السابق قمنا بإستيراد وحدة re
. ثم إستخدمنا دالة re.sub()
التي تستبدل تكرارات نمط معين في سلسلة باستبدال محدد، و في هذه الحالة نحن نستبدل الفواصل بالفراغ، وبالتالي السلسلة الفارغة هي الوسيط الثاني.
تمامًا مثلreplace()
وtranslate()
، لا تقوم الدالةre.sub()
بتعديل السلسلة الأصلية بل تقوم بإرجاع سلسلة جديدة والتي نعيد تعيينها إلى s
.
على الرغم من أن التعابير القياسية يمكنها التعامل مع الحالات المعقدة وتوفير قدر كبير من المرونة، إلا أنها غير مناسبة للمهام البسيطة مثل إزالة حرف واحد من سلسلة.
كما تعتبر التعابير القياسية صعبة نوعا ما خاصة للمبتدئين.
على الرغم من أن الطرق الثلاث التي ناقشناها فعالة في الحالات العامة، إلا أنه قد نواجه مواقف تتطلب معالجة أكثر دقة. دعونا نلقي نظرة على بعضها.
إزالة الفواصل من أجزاء معينة من السلسلة
قد تكون هناك حالات تريد فيها إزالة الفواصل من أجزاء معينة من السلسلة. في هذه المواقف، يمكنك الجمع بين تشريح السلسلة و التوابع.
على سبيل المثال، يمكنك إزالة الفواصل من النصف الأول من السلسلة، وترك النصف الثاني دون تغيير:
s = "H,e,l,l,o, W,o,r,l,d"
first_half = s[:len(s)//2].replace(",", "")
second_half = s[len(s)//2:]
s = first_half + second_half
print(s)
Hello W,o,r,l,d
التعامل مع السلاسل ذات الأحرف المتعددة والمختلفة
إذا كانت السلسلة الخاصة بك تحتوي على عدة أحرف مختلفة، فقد تحتاج إلى إزالتها جميعًا.
في هذه الحالات، قد تكونtranslate()
أو التعابير القاسية أكثر ملاءمة، حيث يمكنها التعامل مع أحرف متعددة في وقت واحد:
s = "H,e,l,l,o, W,o,r,l,d!"
table = s.maketrans(",!", "")
s = s.translate(table)
print(s)
هذه مجرد أمثلة قليلة لحالات أكثر تعقيدًا قد تواجهها. ضع في اعتبارك دائمًا المتطلبات لحالة الاستخدام الخاصة بك عند اختيار النهج الذي ستتبعه.
تعد بايثون قوية في معالجة السلاسل حيث توفر مجموعة متنوعة من التوابع لإزالة الأحرف من السلاسل، من بينهاreplace()
وtranslate()
و maketrans(
بالإضافة إلى التعابير القياسية.
و يعتمد الاختيار الأفضل بين هذه الطرق على مدى تعقيد حالة الاستخدام، وحجم سلاسلك، و معرفتك الشخصية في بناء الجمل.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.