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

السؤال

نشر

اعتدت أن استخدم السطر التالي في بيرل للتخلص من الحروف غير قابلة للطباعة من السلاسل النصية:

$s =~ s/[^[:print:]]//g;

فهل توجد طريقة مشابهة في بايثون لفعل ذلك؟ مثلا الدوران حول السلسلة النصي والتأكد من كل حرف؟

Recommended Posts

  • 0
نشر

يوجد عدة طرق لفعل ذلك في لغة بايثون، ولكن للآسف إن عملية الدوران حول عناصر السلسلة النصية بطيئة كثيرا، لذلك في الطريقة الأول التي سنستعملها سنستخدم التعابير النمطية مع دوال متعددة مثل join و map وسنحول السلسلة النصية إلى unicode لتسهيل وتسريع العملية ولأخذ فقط الأعداد والحروف وبعض الرموز من السلسلة النصية كما في المثال التالي:

import unicodedata, re

all_chars = (unichr(i) for i in xrange(0x110000))
control_chars = ''.join(c for c in all_chars if unicodedata.category(c) == 'Cc')
# or equivalently and much more efficiently
control_chars = ''.join(map(unichr, range(0,32) + range(127,160)))

control_char_re = re.compile('[%s]' % re.escape(control_chars))

def remove_control_chars(s):
    return control_char_re.sub('', s)

ومن الطرق الأخرى أيضا، يمكنك استخدام دالة printable من وحدة string للحصول على الحروف القابلة للطباعة و من ثم تستخدم filter وlambda لحذف الحروف غير  قابلة للطباعة كالتالي:

import string

filtered_string = filter(lambda x: x in string.printable, myStr)

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...