• 0

كيف أقسّم سلسلة نصية في بايثون ؟

أريد أن أقوم بتقسيم السلسلة النصية التالية:

"Hey, you - what are you doing here!?"

لتصبح على هذا الشكل:

['hey', 'you', 'what', 'are', 'you', 'doing', 'here']

لكن دالة str.split() تعمل فقط مع وسيط واحد (argument) فكيف أستطيع التعامل مع الجمل التي بها رموز ؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك العديد من الحلول، فيمكنك على سبيل المثال استخدام هذه الطريقة التي استعملنا فيها التعابير العادية:

import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

كما أنه يوجد حل باستخدام دالة split التي سنقوم فيها بتمرير W+ بطرق مختلفة كمعامل أول، أنظر إلى المثال التالي لتفهم قصدي:

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']

ويمكنك أيضا استخدام طرق سهلة وتقليدية وغير معقدة لتقسيم السلسلة النصية، فمثلا يمكنك استخدام دالة split() لفصل رموز معينة من السلسلة النصية:

>>> 'a;bcd,ef g'.replace(';',' ').replace(',',' ').split()
['a', 'bcd', 'ef', 'g']

وفي النهاية يمكنك استخدام هذا الحل بدون regex حيث استخدمنا فيه دوال من مكتبة string كما في المثال:

import string
punc = string.punctuation
thestring = "Hey, you - what are you doing here!?"
s = list(thestring)
''.join([o for o in s if not o in punc]).split()

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن