• 0

كيف أستبدل مجموعة سلاسل نصية في بايثون؟

أريد استخدام دالة replace لاستبدال عدة سلاسل نصية كما في المثال التالي:

string.replace("condition1", "").replace("condition2", "text")

لكن المشكلة أن السطر سيكون طويل إذا كان لدي المزيد من الاستبدالات، فهل هنالك طريقة أقصر وأفضل لفعل ذلك؟

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


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

هنالك عدّة طرق لاستبدال مجموعة من سلاسل نصية موجودة في سلسلة نصية معينة في بايثون، فيمكنك على سبيل المثال الاستعانة بالتعابير النمطية عن طريق استخدام دوال 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.

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


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

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

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

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


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

تسجيل الدخول

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


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