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

السؤال

نشر

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...