بنية المشروع
التعبيرات النمطية
2 دقيقة للقراءة
التعبيرات النمطية (regex) هي أنماط لمطابقة النص. إنها مفيدة لتحليل استجابات الذكاء الاصطناعي واستخراج البيانات والتحقق من المدخلات.
مطابقة الأنماط الأساسية
import re
text = "تواصل معنا على support@example.com"
# البحث عن نمط
match = re.search(r"@\w+\.\w+", text)
if match:
print(match.group()) # "@example.com"
# إيجاد جميع المطابقات
emails = re.findall(r"\S+@\S+", text)
الأنماط الشائعة
| النمط | يُطابق | مثال |
|---|---|---|
\d |
رقم | 0-9 |
\w |
حرف كلمة | a-z, A-Z, 0-9, _ |
\s |
مسافة بيضاء | مسافة، تاب، سطر جديد |
. |
أي حرف | أي شيء ما عدا سطر جديد |
+ |
واحد أو أكثر | \d+ يُطابق "123" |
* |
صفر أو أكثر | \d* يُطابق "" أو "123" |
? |
صفر أو واحد | \d? يُطابق "" أو "5" |
[] |
مجموعة أحرف | [aeiou] يُطابق حروف العلة |
استخراج البيانات من استجابات الذكاء الاصطناعي
import re
# استخراج كتل الكود من markdown
response = """
إليك الكود:
```python
def hello():
print("مرحباً!")
"""
code_pattern = r"(\w+)?\n(.*?)"
matches = re.findall(code_pattern, response, re.DOTALL)
for lang, code in matches:
print(f"اللغة: {lang}")
print(f"الكود: {code}")
## Search و Match و Findall
```python
import re
text = "الطلب #12345 شُحن في 2024-01-15"
# search: إيجاد أول مطابقة في أي مكان
result = re.search(r"#(\d+)", text)
print(result.group(1)) # "12345"
# match: المطابقة في البداية فقط
result = re.match(r"الطلب", text) # يعمل
result = re.match(r"شُحن", text) # None (ليس في البداية)
# findall: إيجاد جميع المطابقات
numbers = re.findall(r"\d+", text) # ["12345", "2024", "01", "15"]
الاستبدال
import re
# استبدال الأنماط
text = "هاتفي هو 123-456-7890"
masked = re.sub(r"\d", "X", text)
# "هاتفي هو XXX-XXX-XXXX"
# الاستبدال مع المجموعات الملتقطة
text = "التاريخ: 2024-01-15"
formatted = re.sub(r"(\d{4})-(\d{2})-(\d{2})", r"\2/\3/\1", text)
# "التاريخ: 01/15/2024"
أمثلة عملية للذكاء الاصطناعي
import re
# استخراج استدعاءات الأدوات من مخرجات الوكيل
output = "سأستخدم search(query='دروس بايثون') لإيجاد ذلك."
tool_pattern = r"(\w+)\(([^)]+)\)"
match = re.search(tool_pattern, output)
if match:
tool_name = match.group(1) # "search"
args = match.group(2) # "query='دروس بايثون'"
# تحليل المخرجات المنظمة
response = "الجواب: عاصمة فرنسا هي باريس."
answer_pattern = r"الجواب:\s*(.+)"
match = re.search(answer_pattern, response)
if match:
answer = match.group(1) # "عاصمة فرنسا هي باريس."
# التحقق من تنسيق مفتاح API
def is_valid_openai_key(key):
pattern = r"^sk-[A-Za-z0-9]{48}$"
return bool(re.match(pattern, key))
مرجع سريع
import re
# العمليات الشائعة
re.search(pattern, text) # إيجاد أول مطابقة
re.match(pattern, text) # المطابقة في البداية
re.findall(pattern, text) # إيجاد جميع المطابقات
re.sub(pattern, repl, text) # استبدال المطابقات
re.split(pattern, text) # التقسيم بالنمط
# الأعلام
re.IGNORECASE # غير حساس لحالة الأحرف
re.DOTALL # . يُطابق أسطر جديدة
re.MULTILINE # ^ و $ يُطابقان حدود الأسطر
تهانينا! لقد أكملت دورة بايثون لتطوير الذكاء الاصطناعي. أنت الآن جاهز لبناء وكلاء الذكاء الاصطناعي! :::