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

السؤال

نشر

لدي ملف يحتوي على جمل وفي هذه الجمل يوجد أرقام كثيرة، كيف يمكنني إستخراج الأرقام من هذه النصوص؟

على سبيل المثال لدي المتغير التالي:

x = "Hello, World! 0 Started 99, I'm 20 years"

كيف أحصل على النتيجة التالية:

[0, 99, 20]

حاولت أن أقوم بالمرور على كل حرف في النص ولكن بهذه الطريقة سوف أحصل على كل الأرقام في شكل نص واحد فقط، وأنا أريد قائمة من الأرقام كما في المثال السابق.

Recommended Posts

  • 1
نشر

لاحظ أن بعض الدوال لا يمكنها إستخراج القيم السالبة و الأرقام المكتوبة بصورة علمية scientific writing مثل 0.000000123 والتي يمكن كتابتها في بايثون بصيغة 1.23E-7، للحصول على دالة أشمل يمكننا إستخراج الأرقام و العلامات مثل - (موجودة في الأرقام السالبة و الأرقام العلمية) من النص و تخطي أي قيم حرفية كالتالي:

newstr = ''.join((ch if ch in '0123456789.-e' else ' ') for ch in s)

بذلك نحصل على كل الأرقام مجمعة (نتيجة لإتخدام الدالة join) في شكل نص و بوجود فراغات ( الحروف التي تم تخطيها من قبل الشرط if) و نقوم بتحويل النص المحتوي على كل الأرقام الممكنة إلى قائمة بإستخدام split، كما يمكننا تحويل كل الأرقام إلى قيم كسرية (إختياري) كالتالي:

listOfNumbers = [float(i) for i in newstr.split()]

بذلك تكون كل الأرقام مخزنة في المتغير listOfNumbers.

  • 0
نشر

يمكننا فعل ذلك باستخدام الدالة Split التي تقوم بتقسيم النص إلى قائمة حيث تكون كل كلمة عنصر قائمة,  بعد تقسيم النص يمكننا فحص كل كلمة هل هي رقم أم لا باستخدام الدالة isdigit

x = "Hello, World! 0 Started 99 , I'm 20 years"
num = [int(i) for i in x.split() if i.isdigit()]
print(str(num))

 

  • 0
نشر

يمكننا باستخدام التعابير المنتظمة: نستورد المكتبة re = regular expression ثم نطبق الدالة findall:

import re
text = "Hello, World! 0 Started 99, I'm 20 years"
result = re.findall(r'\d+', text)
=>
['42', '32', '30']
  • d يعبر عن digit أي رقم.
  • + (على الأقل واحد)

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...