Blackhacker نشر 23 يناير 2016 أرسل تقرير نشر 23 يناير 2016 اعتدت أن استخدم السطر التالي في بيرل للتخلص من الحروف غير قابلة للطباعة من السلاسل النصية:$s =~ s/[^[:print:]]//g; فهل توجد طريقة مشابهة في بايثون لفعل ذلك؟ مثلا الدوران حول السلسلة النصي والتأكد من كل حرف؟ اقتباس
0 هشام رزق الله نشر 23 يناير 2016 أرسل تقرير نشر 23 يناير 2016 يوجد عدة طرق لفعل ذلك في لغة بايثون، ولكن للآسف إن عملية الدوران حول عناصر السلسلة النصية بطيئة كثيرا، لذلك في الطريقة الأول التي سنستعملها سنستخدم التعابير النمطية مع دوال متعددة مثل 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) اقتباس
السؤال
Blackhacker
اعتدت أن استخدم السطر التالي في بيرل للتخلص من الحروف غير قابلة للطباعة من السلاسل النصية:
فهل توجد طريقة مشابهة في بايثون لفعل ذلك؟ مثلا الدوران حول السلسلة النصي والتأكد من كل حرف؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.