Blackhacker نشر 9 ديسمبر 2015 أرسل تقرير مشاركة نشر 9 ديسمبر 2015 أريد استخدام دالة replace لاستبدال عدة سلاسل نصية كما في المثال التالي:string.replace("condition1", "").replace("condition2", "text") لكن المشكلة أن السطر سيكون طويل إذا كان لدي المزيد من الاستبدالات، فهل هنالك طريقة أقصر وأفضل لفعل ذلك؟ اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 هشام رزق الله نشر 9 ديسمبر 2015 أرسل تقرير مشاركة نشر 9 ديسمبر 2015 هنالك عدّة طرق لاستبدال مجموعة من سلاسل نصية موجودة في سلسلة نصية معينة في بايثون، فيمكنك على سبيل المثال الاستعانة بالتعابير النمطية عن طريق استخدام دوال compile و iteritems و escape وغيرها من مكتبة re كما في المثال التالي:import re rep = {"condition1": "", "condition2": "text"} # define desired replacements here # use these three lines to do the replacement rep = dict((re.escape(k), v) for k, v in rep.iteritems()) pattern = re.compile("|".join(rep.keys())) text = pattern.sub(lambda m: rep[re.escape(m.group(0))], text)مثال على استخدام الشيفرة البرمجية السابقة:>>> pattern.sub(lambda m: rep[re.escape(m.group(0))], "(condition1) and --condition2--") '() and --text--' أو يمكنك فعل ذلك بطريقة أسهل عن طريق حلقة التكرار:def replace_all(text, dic): for i, j in dic.iteritems(): text = text.replace(i, j) return text حيث أن text هي السلسلة النصية الكاملة و dic هي قاموس يحتوي على السلاسل النصية التي تريد استبدالها.ملاحظة: تم استبدال دالة iteritems() بدالة items() في بايثون 3. اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Blackhacker
أريد استخدام دالة replace لاستبدال عدة سلاسل نصية كما في المثال التالي:
لكن المشكلة أن السطر سيكون طويل إذا كان لدي المزيد من الاستبدالات، فهل هنالك طريقة أقصر وأفضل لفعل ذلك؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.