Blackhacker نشر 9 ديسمبر 2015 أرسل تقرير نشر 9 ديسمبر 2015 أريد استخدام دالة replace لاستبدال عدة سلاسل نصية كما في المثال التالي:string.replace("condition1", "").replace("condition2", "text") لكن المشكلة أن السطر سيكون طويل إذا كان لدي المزيد من الاستبدالات، فهل هنالك طريقة أقصر وأفضل لفعل ذلك؟ اقتباس
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. اقتباس
السؤال
Blackhacker
أريد استخدام دالة replace لاستبدال عدة سلاسل نصية كما في المثال التالي:
لكن المشكلة أن السطر سيكون طويل إذا كان لدي المزيد من الاستبدالات، فهل هنالك طريقة أقصر وأفضل لفعل ذلك؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.