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

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

ahmed1990

السؤال

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

this is "a test"

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

['this','is','a test']
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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']

المصدر

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...