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

السؤال

نشر

لو فرضنا أن لدي السلسلة النصية التالية 'gfgfdAAA1234ZZZuijjk' وأريد استخراج جزء 1234 وكل ما أعرفه أن هناك AAA قبل الرقم وZZZ بعده، فما الطريقة الصحيحة لفعل ذلك؟
مثال على ما أريده:

echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"

Recommended Posts

  • 0
نشر

يوجد عدة طرق في لغة بايثون لفعل ذلك، بعضها باستخدام التعابير النمطية والآخر فبدونها، فمثلا يمكنك استخدام دوال مكتبة التعابير النمطية للبحث عن AAA و ZZZ واستخراج ما بينها كما في المثال التالي:

import re

text = 'gfgfdAAA1234ZZZuijjk'

m = re.search('AAA(.+?)ZZZ', text)
if m:
    found = m.group(1)

# found: 1234

أو يمكنك تطوير المثال السابق قليلا باستخدام try except كما في المثال التالي:

import re

text = 'gfgfdAAA1234ZZZuijjk'

try:
    found = re.search('AAA(.+?)ZZZ', text).group(1)
except AttributeError:
    # AAA, ZZZ not found in the original string
    found = '' # apply your error handling

# found: 1234

وإذا لم ترغب باستخدام التعابير النمطية فيمكنك في هذه الحالة استخدام دوال المدمج في بايثون مثل دالة find كما في المثال التالي:
 

>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> start = s.find('AAA') + 3
>>> end = s.find('ZZZ', start)
>>> s[start:end]
'1234'

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...