تُعدّ تقسيم السلاسل النصية بناءً على فاصلات متعددة مهمة متكررة في برمجة بايثون. تتناول هذه المقالة طرقًا فعالة وقوية للتعامل مع هذا الأمر، مع تقديم حلول لمختلف السيناريوهات.
محتويات
- تقسيم السلاسل النصية باستخدام فاصلين
- تقسيم السلاسل النصية باستخدام فاصلات متعددة
- معالجة المسافات البيضاء والفاصلات المتعددة
- نهج بديل: استخدام `split()` بشكل متكرر
تقسيم السلاسل النصية باستخدام فاصلين
لنبدأ بمثال بسيط: تقسيم سلسلة نصية باستخدام فاصلين، مثل ‘,’ و ‘;’.
my_string = "apple,banana;orange,grape;kiwi"
قد ينطوي النهج المباشر، وإن كان أقل كفاءة، على استدعاءات متداخلة لطريقة `split()` المدمجة. ومع ذلك، فإن الحل الأكثر أناقة وقوة يستخدم التعبيرات العادية.
import re
my_string = "apple,banana;orange,grape;kiwi"
result = re.split(r"[,;]", my_string)
print(result) # الناتج: ['apple', 'banana', 'orange', 'grape', 'kiwi']
يعرّف التعبير العادي r"[,;]"
مجموعة أحرف تطابق إما ‘,’ أو ‘;’. تقوم re.split()
بتقسيم السلسلة النصية بكفاءة عند كل حدوث لهذه الفواصل.
تقسيم السلاسل النصية باستخدام فاصلات متعددة
إن توسيع هذا الأمر ليشمل المزيد من الفواصل أمر بسيط: فقط أضفها إلى مجموعة الأحرف داخل الأقواس المربعة.
import re
my_string = "apple,banana;orange:grape;kiwi,mango"
result = re.split(r"[,;:]", my_string)
print(result) # الناتج: ['apple', 'banana', 'orange', 'grape', 'kiwi', 'mango']
يتوسع هذا النهج بفعالية إلى أي عدد من الفواصل، مما يجعله حلاً مرنًا للغاية.
معالجة المسافات البيضاء والفاصلات المتعددة
لتضمين المسافات البيضاء كفاصل، يمكننا إضافة s+
(مسافة بيضاء واحدة أو أكثر) إلى التعبير العادي.
import re
my_string = "apple , banana ; orange : grape ; kiwi , mango"
result = re.split(r"[,;:s]+", my_string)
print(result) # الناتج: ['apple', 'banana', 'orange', 'grape', 'kiwi', 'mango']
يضمن مُحدد الكمية +
أن يتم التعامل مع أحرف المسافة البيضاء المتتالية المتعددة كفاصل واحد.
نهج بديل: استخدام `split()` بشكل متكرر
بينما توفر التعبيرات العادية حلاً أنيقًا، فإن النهج البديل ينطوي على استخدام طريقة `split()` المدمجة بشكل متكرر. قد تكون هذه الطريقة مفيدة إذا كنت تتجنب التعبيرات العادية لأي سبب من الأسباب.
my_string = "apple,banana;orange:grape;kiwi,mango"
delimiters = [',', ';', ':']
for delimiter in delimiters:
my_string = my_string.replace(delimiter, ' ')
result = my_string.split()
print(result) # الناتج: ['apple', 'banana', 'orange', 'grape', 'kiwi', 'mango']
تقوم هذه الطريقة باستبدال كل فاصل بمسافة، ثم تقسم السلسلة النصية على المسافات. إنها أقل إيجازًا من نهج التعبير العادي، ولكنها قد تكون أسهل في الفهم بالنسبة لأولئك الأقل دراية بالتعبيرات العادية.
باختصار، توفر التعبيرات العادية طريقة قوية وفعالة لتقسيم السلاسل النصية بناءً على فاصلات متعددة في بايثون. ومع ذلك، فإن النهج التكراري باستخدام `split()` المدمجة يوفر بديلاً أبسط للحالات التي قد تكون فيها التعبيرات العادية أقل رغبة. يعتمد اختيار أفضل طريقة على احتياجاتك المحددة وأسلوب الترميز الخاص بك.