إتقان التعبيرات النمطية في بايثون
التعبيرات النمطية (regex أو regexp) أدوات قوية لمطابقة الأنماط داخل السلاسل النصية. توفر وحدة re
في بايثون واجهة شاملة للعمل معها، مما يتيح معالجة النصوص المتقدمة واستخراج البيانات. سيعلمك هذا البرنامج التعليمي بالوظائف والمفاهيم الأساسية، مما يُمكّنك من الاستفادة من قوة التعبيرات النمطية بشكل فعال في مشاريع بايثون الخاصة بك.
جدول المحتويات
re.match()
: المطابقة في البدايةre.search()
: إيجاد أول مطابقةre.compile()
: تحسين الأداء- الأعلام: تعديل سلوك المطابقة
- مجموعات الأحرف: تحديد الأحرف المسموح بها
- البحث والاستبدال باستخدام
re.sub()
re.findall()
: استخراج جميع المطابقاتre.finditer()
: التكرار عبر المطابقاتre.split()
: تقسيم السلاسل النصية حسب النمط- الأنماط الأساسية: المراسي، فئات الأحرف
- التكرار: الكميات والمطابقة الجشعة مقابل غير الجشعة
- التسلسلات الخاصة: الأرقام، المسافات البيضاء، أحرف الكلمات
re.escape()
: التعامل مع الأحرف الخاصة- مجموعات التقاط وطريقة
group()
1. re.match()
: المطابقة في البداية
تحاول دالة re.match()
مطابقة النمط فقط في بداية السلسلة النصية. تُرجع كائن مطابقة إذا نجحت، وإلا None
.
import re
text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)
if match:
print("تم العثور على مطابقة:", match.group(0))
else:
print("لم يتم العثور على مطابقة")
2. re.search()
: إيجاد أول مطابقة
يقوم re.search()
بمسح السلسلة النصية بالكامل للعثور على أول حدوث للنمط. على عكس re.match()
، لا يتطلب أن تكون المطابقة في البداية.
import re
text = "Hello World"
pattern = "World"
match = re.search(pattern, text)
if match:
print("تم العثور على مطابقة:", match.group(0))
else:
print("لم يتم العثور على مطابقة")
3. re.compile()
: تحسين الأداء
للحصول على أداء أفضل، خاصةً مع الاستخدام المتكرر لنفس النمط، قم بتجميعه باستخدام re.compile()
. هذا ينشئ كائن نمط قابل لإعادة الاستخدام.
import re
compiled_pattern = re.compile(r"d+") # تجميع النمط
text1 = "There are 123 apples"
text2 = "And 456 oranges"
match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)
print(match1.group(0)) # الإخراج: 123
print(match2.group(0)) # الإخراج: 456
4. الأعلام: تعديل سلوك المطابقة
تُعدّل الأعلام عملية المطابقة. يُجري re.IGNORECASE
مطابقة غير حساسة لحالة الأحرف، وre.MULTILINE
يعامل كل سطر كنص منفصل لعلامات ^
و$
.
import re
text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0)) # الإخراج: Hello
5. مجموعات الأحرف: تحديد الأحرف المسموح بها
تحدد مجموعات الأحرف ([]
) الأحرف المسموح بها. على سبيل المثال، [a-z]
يطابق الأحرف الصغيرة.
import re
text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0)) # الإخراج: abc
6. البحث والاستبدال باستخدام re.sub()
يستبدل re.sub()
حدوث نمط بسلسلة استبدال.
import re
text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text) # الإخراج: Hello Python
7. re.findall()
: استخراج جميع المطابقات
يُرجع re.findall()
قائمة بجميع المطابقات غير المتداخلة.
import re
text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers) # الإخراج: ['123', '456']
8. re.finditer()
: التكرار عبر المطابقات
يُرجع re.finditer()
مُكررًا، يُنتج كائنات مطابقة. أكثر كفاءة من حيث الذاكرة بالنسبة للعديد من المطابقات في سلاسل نصية كبيرة.
import re
text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
print(match.group(0)) # الإخراج: 123، 456 (على أسطر منفصلة)
9. re.split()
: تقسيم السلاسل النصية حسب النمط
يقسم re.split()
سلسلة نصية بناءً على نمط.
import re
text = "apple,banana,cherry"
fruits = re.split(r",", text)
print(fruits) # الإخراج: ['apple', 'banana', 'cherry']
10. الأنماط الأساسية: المراسي، فئات الأحرف
.
: يطابق أي حرف باستثناء سطر جديد.^
: يطابق بداية السلسلة النصية.$
: يطابق نهاية السلسلة النصية.[]
: يطابق مجموعة من الأحرف (مثل[abc]
،[a-z]
).[^...]
: يطابق أي حرف ليس في المجموعة (مجموعة أحرف منفية).
11. التكرار: الكميات والمطابقة الجشعة مقابل غير الجشعة
*
: صفر أو أكثر من مرات الحدوث.+
: مرة واحدة أو أكثر من مرات الحدوث.?
: صفر أو مرة واحدة من مرات الحدوث.{m}
: بالضبطm
مرة من مرات الحدوث.{m,n}
: منm
إلىn
مرة من مرات الحدوث.*?
،+?
،??
،{m,n}?
: الإصدارات غير الجشعة (مطابقة أقصر سلسلة ممكنة).
12. التسلسلات الخاصة: الأرقام، المسافات البيضاء، أحرف الكلمات
d
: يطابق أي رقم (0-9).D
: يطابق أي حرف ليس رقمًا.s
: يطابق أي حرف مسافة بيضاء (مسافة، علامة تبويب، سطر جديد).S
: يطابق أي حرف ليس مسافة بيضاء.w
: يطابق أي حرف أبجدي رقمي (حروف، أرقام، شرطة سفلية).W
: يطابق أي حرف ليس أبجديًا رقميًا.
13. re.escape()
: التعامل مع الأحرف الخاصة
يقوم re.escape()
بإفلات الأحرف الخاصة في سلسلة نصية، مما يسمح لك باستخدامها كنمط حرفي دون تفسيرات تعبير نمطي غير مقصودة.
14. مجموعات التقاط وطريقة group()
تقوم الأقواس ()
بإنشاء مجموعات التقاط. تصل طريقة group()
إلى السلاسل النصية المُلتقطة.
import re
text = "My phone number is 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
area_code = match.group(1)
prefix = match.group(2)
line_number = match.group(3)
print(f"رمز المنطقة: {area_code}, البادئة: {prefix}, رقم الخط: {line_number}")
يوفر هذا البرنامج التعليمي أساسًا متينًا لوحدة re
في بايثون. سيعزز المزيد من البحث في التقنيات المتقدمة قدرات معالجة السلاسل النصية الخاصة بك بشكل كبير. تذكر الرجوع إلى وثائق بايثون الرسمية للحصول على مرجع كامل.