• 0

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

لنفترض أن لدي السلسلة النصية التالية:

this is "a test"

أريد أن أفصل هذه السلسلة النصية بناءا على الفراغات مع تجاهل الفراغات داخل علامات الاقتباس، أي أن النتيجة ستكون مشابهة لهذه:

['this','is','a test']

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


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

يمكنك استخدام دالة split من وحدة shlex حيث ستقوم بالمطلوب كما في المثال التالي:

>>> import shlex
>>> shlex.split('this is "a test"')
['this', 'is', 'a test']

أو يمكنك استخدام التعابير النمطية على الرغم من أن استخدام الطريقة السابقة أفضل بكثير كما في المثال التالي:

test = 'this is "a test"'  # or "this is 'a test'"
# pieces = [p for p in re.split("( |[\\\"'].*[\\\"'])", test) if p.strip()]
# From comments, use this:
pieces = [p for p in re.split("( |\\\".*?\\\"|'.*?')", test) if p.strip()]

شرح التعابير النمطية:

  • [\\\"']  لعلامات الاقتباس المفردة والمزدوجة
  • .* معناها أي شيء
  • ( |X)  فراغ أو قيمة X
  • .strip() معناها احذف الفراغ وفواصل السلسلة النصية الفارغة

ومن الطرق الأخرى لفصل محتوى سلسلة نصية يمكنك الاستعانة بوحدة csv مع وضع الفراغ كمُحدد كما في المثال التالي:

import csv
lines = ['this is "a string"', 'and more "stuff"']
for row in csv.reader(lines, delimiter=" "):
    print row

وسيكون الناتج:

['this', 'is', 'a string']
['and', 'more', 'stuff']

المصدر

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


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

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

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

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


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

تسجيل الدخول

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


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