اذهب إلى المحتوى

السؤال

نشر

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

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

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

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

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

Recommended Posts

  • 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()

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...