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

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

Blackhacker

السؤال

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

$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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...