• 0

كيف أزيل الحروف غير قابلة للطباعة من السلسلة النصية في بايثون؟

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

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

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

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


رابط هذه المساهمة
  • 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)

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


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

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

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

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


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

تسجيل الدخول

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


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