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

السؤال

نشر

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

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

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

Recommended Posts

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...