دليل التعامل مع السلاسل النصية في بايثون للمبتدئين

دقائق القراءة: 8

تُعدّ معالجة السلاسل النصية في لغة Python من أكثر المهام تكراراً في البرمجة اليومية، سواء كنت تبني تطبيقات ويب، أو تنظّف البيانات، أو تتعامل مع ملفات نصية ومدخلات المستخدم. وتمتاز Python بأنها توفّر مجموعة كبيرة من الدوال والأساليب الجاهزة التي تجعل التعامل مع النصوص أكثر سهولة ووضوحاً مقارنةً بكثير من اللغات الأخرى.

في هذا الدليل العملي، ستتعرّف إلى أهم أساسيات النصوص في Python، وكيفية تقسيمها وتنظيفها وتنسيقها، بالإضافة إلى فهم الفروق الدقيقة بين بعض الدوال التي قد تبدو متشابهة ظاهرياً.

دليل عملي لتعلم معالجة السلاسل النصية في بايثون للمبتدئين

أساسيات السلاسل النصية في بايثون

النوع النصي في Python يُعرف باسم str، وهو من أكثر الأنواع استخداماً. يمكنك إنشاء سلسلة نصية باستخدام علامات الاقتباس المفردة أو المزدوجة، أو عبر الدالة str().

my_city = "New York"
print(type(my_city))

my_city = 'New York'
print(type(my_city))

my_city = str("New York")
print(type(my_city))
<class 'str'>
<class 'str'>
<class 'str'>

دمج السلاسل النصية

يمكنك استخدام العامل + لربط أكثر من سلسلة نصية في نص واحد.

word1 = 'New '
word2 = 'York'
print(word1 + word2)
New York

الوصول إلى حرف محدد

للوصول إلى حرف معيّن داخل السلسلة النصية، استخدم الأقواس المربعة [] مع رقم الفهرس. يبدأ العد من 0.

word = "Rio de Janeiro"
char = word[0]
print(char)
R

معرفة طول السلسلة النصية

تعيد الدالة len() عدد الأحرف الموجودة في السلسلة.

print(len('Rio'))
print(len('Rio de Janeiro'))
3
14

استبدال جزء من النص

تُستخدم الدالة replace() لاستبدال جزء من السلسلة النصية بجزء آخر.

print('Rio de Janeiro'.replace('Rio', 'Mar'))
Mar de Janeiro

عدّ التكرارات داخل النص

يمكنك استخدام الدالة count() لحساب عدد مرات ظهور حرف أو مقطع معيّن.

word = "Rio de Janeiro"
print(word.count(' '))
2

تكرار السلسلة النصية

باستخدام العامل * يمكنك تكرار النص أكثر من مرة.

words = "Tokyo" * 3
print(words)
TokyoTokyoTokyo

كيفية تقسيم النص في بايثون باستخدام split()

تُعدّ الدالة split() من أكثر الأدوات استخداماً عند التعامل مع النصوص، لأنها تسمح لك بتجزئة السلسلة النصية إلى أجزاء أصغر.

التقسيم بالمسافات

my_phrase = "let's go to the beach"
my_words = my_phrase.split(" ")

for word in my_words:
    print(word)

print(my_words)
let's
go
to
the
beach
["let's", 'go', 'to', 'the', 'beach']

وإذا لم تمرّر أي وسيط إلى split()، فإنها تتعامل تلقائياً مع المسافات المتتالية باعتبارها فواصل.

my_phrase = "let's go to the beach"
my_words = my_phrase.split()

for word in my_words:
    print(word)

التقسيم بفاصل مخصص

هذا مفيد جداً عند التعامل مع ملفات CSV أو البيانات المفصولة بفواصل أو فواصل منقوطة.

my_csv = "mary;32;australia;mary@email.com"
my_data = my_csv.split(";")

for data in my_data:
    print(data)

print(my_data[3])
mary
32
australia
mary@email.com
mary@email.com

إزالة جميع المسافات البيضاء من النص

إذا أردت حذف جميع المسافات البيضاء فعلياً، بما في ذلك المسافات العادية وعلامات الجدولة والأسطر الجديدة، فالحل الأنسب يكون باستخدام التعبيرات النمطية عبر الوحدة re. الرمز \s يشمل مسافات متعددة مثل ' ' و\n و\t و\r و\f و\v.

import re

phrase = ' Do or do not there is no try '
phrase_no_space = re.sub(r'\s+', '', phrase)

print(phrase)
print(phrase_no_space)
 Do or do not there is no try 
Doordonotthereisnotry

لاحظ أن النص الأصلي لا يتغيّر، لذا يجب حفظ النتيجة في متغير جديد مثل phrase_no_space.

التعامل مع النصوص متعددة الأسطر

باستخدام الاقتباسات الثلاثية

أسهل طريقة لإنشاء نص متعدد الأسطر في Python هي استخدام علامات الاقتباس الثلاثية.

long_text = """This is a multiline,
a long string with lots of text,
I'm wrapping it in triple quotes to make it work."""

print(long_text)

باستخدام الأقواس

يمكنك أيضاً جمع النص بين أقواس، لكنك ستحتاج إلى \n إذا أردت الانتقال إلى سطر جديد.

long_text = (
    "This is a multiline,\n\n"
    "a long string with lots of text\n\n"
    "I'm wrapping it in brackets to make it work."
)

print(long_text)

باستخدام الشرطة المائلة العكسية

long_text = "This is a multiline, \n\n" \
"a long string with lots of text \n\n" \
"I'm using backslashes to make it work."

print(long_text)

تنظيف بدايات ونهايات النصوص

استخدام lstrip()

تحذف الدالة lstrip() المسافات أو الأحرف المحددة من بداية النص.

regular_text = " This is a regular text."
no_space_begin_text = regular_text.lstrip()

print(regular_text)
print(no_space_begin_text)
regular_text = "$@G#This is a regular text."
clean_begin_text = regular_text.lstrip("#$@G")

print(clean_begin_text)

استخدام rstrip()

تعمل rstrip() بالطريقة نفسها لكن من نهاية النص.

regular_text = "This is a regular text. "
no_space_end_text = regular_text.rstrip()

print(regular_text)
print(no_space_end_text)
regular_text = "This is a regular text.$@G#"
clean_end_text = regular_text.rstrip("#$@G")

print(clean_end_text)

استخدام strip()

إذا أردت التنظيف من البداية والنهاية معاً، فاستخدم strip().

regular_text = " This is a regular text. "
no_space_text = regular_text.strip()

print(regular_text)
print(no_space_text)
regular_text = "AbC#This is a regular text.$@G#"
clean_text = regular_text.strip("AbC#$@G")

print(clean_text)

تغيير حالة الأحرف في النص

تحويل النص إلى أحرف صغيرة باستخدام lower()

regular_text = "This is a Regular TEXT."
lower_case_text = regular_text.lower()

print(lower_case_text)

تحويل النص إلى أحرف كبيرة باستخدام upper()

regular_text = "This is a regular text."
upper_case_text = regular_text.upper()

print(upper_case_text)

تنسيق العنوان باستخدام title()

regular_text = "This is a regular text."
title_case_text = regular_text.title()

print(title_case_text)

عكس حالة الأحرف باستخدام swapcase()

regular_text = "This IS a reguLar text."
swapped_case_text = regular_text.swapcase()

print(swapped_case_text)

تحويل أول حرف فقط إلى كبير باستخدام capitalize()

text = 'this is a regular text'
print(text.capitalize())

text = 'THIS IS A REGULAR TEXT'
print(text.capitalize())

التحقق من حالة النص ومحتواه

كيف تتحقق من أن النص فارغ

الطريقة الأبسط والأكثر شيوعاً في Python هي استخدام العامل not.

my_string = ''
if not my_string:
    print("My string is empty!!!")
my_string = 'amazon, microsoft'
if my_string:
    print("My string is NOT empty!!!")

التحقق من المحاذاة باستخدام rjust() وljust() وcenter()

تساعدك هذه الدوال في تنسيق النصوص داخل عرض ثابت، وهو أمر مفيد في التقارير النصية والمخرجات المنظمة.

word = 'beach'
print(word.rjust(32))
print(word.ljust(32))
print(word.center(32))
word = 'beach'
print(word.rjust(32, '$'))
print(word.ljust(32, '$'))
print(word.center(33, '$'))

إضافة أصفار في البداية باستخدام zfill()

word = 'beach'
size_string = 32
word_zeros = word.zfill(size_string)
print(word_zeros)
word = 'beach'
size_string = 4
word_zeros = word.zfill(size_string)
print(word_zeros)

دوال التحقق الشائعة على السلاسل النصية

توفر Python مجموعة كبيرة من الدوال التي تعيد قيمة منطقية True أو False بحسب محتوى النص.

  • isalnum(): يتحقق من أن النص يحتوي على أحرف وأرقام فقط.
  • isalpha(): يتحقق من أن النص يحتوي على أحرف فقط.
  • isdigit(): يتحقق من أن النص يحتوي على أرقام رقمية فقط.
  • isdecimal(): أكثر صرامة من isdigit()، ويقبل الأرقام العشرية القياسية فقط.
  • isnumeric(): أكثر مرونة من isdigit()، ويقبل أشكالاً رقمية أخرى.
  • islower(): يتحقق من أن جميع الأحرف الأبجدية صغيرة.
  • isupper(): يتحقق من أن جميع الأحرف الأبجدية كبيرة.
  • istitle(): يتحقق من أن كل كلمة تبدأ بحرف كبير.
  • isspace(): يتحقق من أن النص يحتوي على مسافات بيضاء فقط.
  • isprintable(): يتحقق من أن جميع المحارف قابلة للطباعة.

أمثلة عملية

word = 'number32'
print(word.isalnum())

word = 'beach'
print(word.isalpha())

word = '32'
print(word.isdigit())
print(word.isdecimal())
print(word.isnumeric())
text = 'THIS IS A REGULAR TEXT'
print(text.isupper())

text = 'this is a regular text'
print(text.islower())

text = 'This Is A Regular Text'
print(text.istitle())
text = ' \f\n\r\t\v'
print(text.isspace())

text = '\f\n\r\t\v'
print(text.isprintable())

التحقق من بداية النص باستخدام startswith()

تُستخدم startswith() لمعرفة ما إذا كانت السلسلة النصية تبدأ بقيمة معيّنة، كما يمكنك تحديد نطاق البحث أو تمرير عدة احتمالات عبر tuple.

phrase = "This is a regular text"
print(phrase.startswith('This is'))
print(phrase.startswith('text'))
phrase = "This is a regular text"
print(phrase.startswith('regular', 10))
print(phrase.startswith('regular', 10, 22))
print(phrase.startswith('regular', 10, 15))
phrase = "This is a regular text"
print(phrase.startswith(('regular', 'This')))
print(phrase.startswith(('regular', 'text')))
print(phrase.startswith(('regular', 'text'), 10, 22))

دمج العناصر في نص واحد باستخدام join()

تُستخدم join() لدمج عناصر قابلة للتكرار داخل سلسلة نصية واحدة، بشرط أن تكون جميع العناصر من النوع النصي.

مع النصوص

my_string = 'beach'
print('$'.join(my_string))

مع القوائم

my_list = ['bmw', 'ferrari', 'mclaren']
print('$'.join(my_list))
my_list = [1, 2, 3]
print('$'.join(my_list))

مع tuple

my_tuple = ('bmw', 'ferrari', 'mclaren')
print('$'.join(my_tuple))

مع set

my_set = {'bmw', 'ferrari', 'mclaren'}
print('|'.join(my_set))

مع dictionary

عند استخدام join() مع القاموس، سيتم دمج المفاتيح وليس القيم.

my_dict = {
    'bmw': 'BMW I8',
    'ferrari': 'Ferrari F8',
    'mclaren': 'McLaren 720S'
}
print(','.join(my_dict))

تقسيم النص عند فواصل الأسطر باستخدام splitlines()

my_string = 'world \n cup'
print(my_string.splitlines())
my_string = 'world \n cup'
print(my_string.splitlines(True))

البحث داخل النص باستخدام find()

تعيد الدالة find() موضع أول تطابق داخل النص، وإذا لم تجد شيئاً فستعيد -1.

phrase = "This is a regular text"
print(phrase.find('This'))
print(phrase.find('regular'))
print(phrase.find('text'))
phrase = "This is a regular text"
print(phrase.find('train'))
phrase = "This is a regular text"
print(phrase.find('This', 0, 7))
print(phrase.find('regular', 0, 17))
print(phrase.find('a', 0, 15))

إزالة البادئات واللواحق باستخدام removeprefix() وremovesuffix()

ابتداءً من Python 3.9 أصبح بالإمكان حذف بادئة أو لاحقة محددة بشكل مباشر.

print('Rio de Janeiro'.removeprefix('Rio'))
print('Rio de Janeiro'.removesuffix('eiro'))

الفرق بين lstrip() وremoveprefix()

هذا الفرق مهم جداً:

  • lstrip() يتعامل مع مجموعة أحرف ويحذفها من البداية ما دامت موجودة.
  • removeprefix() يحذف تطابقاً دقيقاً لبادئة محددة.
word = 'hubbubbubboo'
print(word.lstrip('hub'))
print(word.removeprefix('hub'))

الفرق بين rstrip() وremovesuffix()

word = 'peekeeneenee'
print(word.rstrip('nee'))
print(word.removesuffix('nee'))

ومن الناحية العملية، فإن استخدام strip() وأشقائه أسهل بكثير من اللجوء إلى تعبير نمطي معقّد إذا كان المطلوب مجرد تنظيف البداية أو النهاية.

import re

word = 'amazonia'
print(word.strip('ami'))
print(re.search('^[ami]*(.*?)[ami]*$', word).group(1))

فهم التقطيع Slicing في بايثون

يُعدّ slicing من أقوى أدوات Python، لأنه يسمح لك باقتطاع أجزاء من النصوص والقوائم بسهولة شديدة.

الصيغة الأساسية

list[start:stop:step]
  • start: موضع البداية.
  • stop: موضع النهاية غير الشامل.
  • step: مقدار القفز بين العناصر، وقيمته الافتراضية 1.

فهم الفهارس

في الكلمة movie تكون الفهارس كالتالي:

+---+---+---+---+---+
| m | o | v | i | e |
+---+---+---+---+---+
0   1   2   3   4   5
-5 -4 -3 -2 -1

وعند استخدام word[:2] فستحصل على mo وليس mov، لأن قيمة stop لا تدخل ضمن الناتج.

أمثلة على التقطيع

word = 'movie'

sliced = word[:2]
print(sliced)

sliced = word[-1]
print(sliced)

sliced = word[::2]
print(sliced)
mo
e
mve

عكس السلسلة النصية في بايثون

يمكنك عكس النص بسهولة عبر slicing باستخدام خطوة سالبة -1.

my_string = "ferrari"
my_string_reversed = my_string[::-1]

print(my_string)
print(my_string_reversed)
ferrari
irarref

عندما تكون قيمة step هي -1 فإن Python تبدأ من نهاية النص وتعود إلى البداية حرفاً حرفاً.

نصائح عملية لتحسين التعامل مع النصوص في بايثون

  • استخدم split() وjoin() عند معالجة البيانات النصية بدلاً من الحلول اليدوية.
  • اعتمد على strip() وlstrip() وrstrip() لتنظيف المدخلات القادمة من المستخدم أو الملفات.
  • افهم جيداً الفروقات بين isnumeric() وisdigit() وisdecimal() قبل التحقق من القيم الرقمية.
  • لا تنسَ أن معظم دوال السلاسل النصية تعيد نسخة جديدة، ولا تعدّل النص الأصلي مباشرة.
  • استخدم slicing بوعي، لأنه من أكثر الأدوات قوة واختصاراً في كتابة الشيفرة النظيفة.

الخلاصة التقنية

تتميّز السلاسل النصية في Python بواجهة غنية وسهلة الفهم، وهذا ما يجعلها مناسبة جداً للمبتدئين وفي الوقت نفسه قوية بما يكفي للمشاريع الاحترافية. إذا أتقنت الدوال الأساسية مثل split() وjoin() وstrip() وfind() وslicing، فستختصر على نفسك كثيراً من الوقت عند بناء التطبيقات أو تنظيف البيانات أو تحليل النصوص. والأهم من ذلك أن الفهم الدقيق للفروق بين الدوال المتشابهة يمنحك شيفرة أوضح، أكثر أماناً، وأسهل في الصيانة مستقبلاً.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *