مهام يومية يمكن أتمتتها بسهولة باستخدام Regex
Regex أو التعبيرات النمطية أداة قوية توفر لك وسيلة مرنة لتبسيط العديد من المهام المتكررة. سواء كنت تعمل على معالجة النصوص، أو تحسين البيانات، أو حتى تعديل الملفات البرمجية، يمكن لRegex توفير الوقت والجهد بشكل كبير. باستخدامه بشكل صحيح، يمكنك أتمتة العمليات التي تستغرق عادةً وقتًا طويلًا، مما يجعل عملك أكثر كفاءة ودقة. اكتشف كيف يمكن لهذه التقنية أن تغير طريقتك في إنجاز المهام.
إن التعبيرات العادية هي أداة رائعة إذا كنت تعرف كيفية استخدامها. ومن المؤسف أنها ليست أسهل شيء في العالم لتفسيره. ومع ذلك، باستخدام التعبير المناسب، يمكنك أتمتة أي شيء تريده. التعبيرات العادية مثالية للبحث عن النص ومطابقته ومعالجته، كما في هذه الحالات الثماني.
لماذا تستخدم التعبيرات العادية؟
إن التعبيرات العادية (اختصارًا للتعبيرات العادية) تجعل التنظيف والتوحيد أمرًا سهلاً. وفي حين أنها متعددة الاستخدامات كأداة تحرير، إلا أن لها حدودًا في التطبيق. وأفضل طريقة للتفكير في التعبيرات العادية هي البحث باستخدام الأحرف البدل أو البحث والاستبدال الفائق القوة الذي يمكنك استخدامه وقتما تحتاج إليه—حيث يتم دعمه بالطبع. بدأ برنامج Microsoft Excel مؤخرًا في دعم التعبيرات العادية، مما يجعلها مهارة مفيدة للتعلم.
ولكن ما الذي يمكنك استخدامه بالضبط للتعبيرات العادية؟ دعنا نلقي نظرة على ثمانية أمثلة شائعة.
نصيحة
بعض البرامج لا تدعم التعبيرات العادية، والبعض الآخر يدعمها جزئيًا فقط. تعتبر التطبيقات مثل Notepad++ مثالية لتنفيذ أوامر التعبيرات العادية باستخدام وظائف البحث والاستبدال.
إصلاح نص PDF المنسوخ والملصق
لقد مررنا جميعًا بهذه التجربة: نسخ بعض الأشياء من ملف PDF ثم لصقها في مستندك الخاص، فقط لتجد مسافات غريبة وآثارًا غريبة تظهر مع النسخة. ولكن هل تعلم أن التعبيرات العادية يمكن أن تساعد في ذلك؟ أدخل هذا الأمر في وظيفة البحث والاستبدال:
Find: [^\S\r\n]{2,}|\s*\r?\n\s*\r?\n\s*
Replace: \n
سيؤدي هذا التعبير العادي إلى جعل محرر النصوص الخاص بك:
- يزيل أي مثيل للمسافات المتعددة
- يقلل من فواصل الأسطر المتعددة إلى فواصل أسطر واحدة
- يتخلص من المسافات الزائدة
- يجب أن يؤدي هذا إلى تنظيف أي نص منسوخ لديك وتحويله إلى شيء مفيد.
إعادة تسمية الملفات التي تم تنزيلها بالجملة
في أكثر من حادث مؤسف، قمت بتنزيل مجموعة من الملفات، وجاءت بأسماء غريبة مضافة. إذا كان لديك أداة لإعادة التسمية بالجملة مثل Advanced Renamer، فيمكنك استخدام تعبير عادي لتنظيف أسماء الملفات هذه وتحويلها إلى شيء أكثر قابلية للتعرف عليه. إذا كان لديك سلسلة من الملفات تحتوي على رموز في كل مكان، فيمكنك استخدام أداة إعادة التسمية الخاصة بك مع هذا التعبير العادي:
Find: [^a-zA-Z0-9-.]
Replace:
يحافظ هذا على الأرقام والنقاط والحروف كما هي، لكنه يستبدل كل شيء آخر بشرطات.
تنسيق العملة
لنفترض أن لديك ملفًا يحتوي على عدد هائل من العملات بتنسيقات مختلفة. لا تريد أن تمر يدويًا على كل عملة من هذه العملات وتصلحها بالتنسيق الذي تريده، خاصةً إذا كانت بتنسيقات غريبة متعددة. إليك ما ستستخدمه للتعبير العادي الخاص بك:
Find: \$?\s*(\d+(?:\,\d{3})*(?:\.\d{2})?)\s*(?:USD|dollars?)?
Replace: $\1
سيقوم هذا التعبير العادي بفحص ملف العملة الخاص بك وتنظيف أي شيء ليمنحك علامة الدولار وإدخال العملة ورقمين عشريين للسنتات.
توحيد تنسيقات التاريخ
لقد كنت في عدة مواقف حيث كان عليّ استخراج التواريخ بتنسيق موحد، مثل نقلها من نص إلى قاعدة بيانات. عندما تواجه شيئًا كهذا، يمكنك استخدام تعبير عادي للعثور على البيانات واستخراجها بتنسيق مبسط (في هذه الحالة، يجب أن يكون بتنسيق YYYY-MM-DD). سيكون التعبير العادي لهذا:
Find: \b(?:\d{1,2}[-/\.]\d{1,2}[-/\.]\d{2,4})|(?:(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s.-]?\d{1,2}(?:st|nd|rd|th)?[\s,.-]?\d{2,4})\b
يجب أن يبحث هذا في المستند بالكامل ويثبت جميع التواريخ وفقًا لهذا التنسيق الموحد.
إزالة علامات HTML
عند نسخ شيء ما من الويب، يكون به أحيانًا علامات HTML مرفقة به. لحسن الحظ، يحتوي التعبير العادي على طريقة مفيدة لإزالة علامات HTML من المستند:
Find: <[^>]+>|&[^;]+;|\s*\n\s*
Replace: \n
سيقوم هذا التعبير العادي بفحص المستند والعثور على علامات HTML ومسحها، بالإضافة إلى فواصل الأسطر الإضافية والكيانات الأخرى في HTML (مثل “&”). الآن، يمكنك بسهولة تنظيف مستند مثل هذا ببساطة عن طريق البحث عن العلامات واستبدالها بشيء فارغ باستخدام هذا التعبير العادي:
Find: <[^>]+>
Replace: (empty)
ومع ذلك، إذا كانت مستندك تستخدم علامات HTML غريبة أو تنسيقات أو كيانات، فقد تواجه مشكلات. التعبيرات العادية الأولى عبارة عن تنظيف عام، والثانية أكثر تعمقًا في البحث.
استخراج عناوين URL من النص
في بعض الأحيان، يكون لديك مستند بعناوين URL مدفونة داخل النص. لا يتطلب استخراج عناوين URL هذه البحث اليدوي في المستند بالكامل، وسيوفر لك التعبير العادي الوقت. نحن نعلم بالفعل أن عناوين URL تبدأ دائمًا بـ http أو https، ويمكننا استخدام هذه المعرفة في التعبير العادي الخاص بنا:
Find: (https?:\/\/)?([\w\-]+(\.[\w\-]+)+\.?(:\d+)?(\/\S*)?)|((www\.)?[\w\-]+(\.[\w\-]+)+\.?(:\d+)?(\/\S*)?)
على الرغم من أن هذا المستخرج سيجد عناوين URL الخاصة بك، إلا أنه يعاني من بعض المشكلات. إذا كان لديك عناوين URL مشوهة، أو أي شيء بدون بادئات http أو https، فلن ترى عنوان URL. لن تتلقى رسائل بريد إلكتروني بهذا النمط أيضًا، ولكن هناك نمط آخر يمكنك استخدامه خصيصًا لرسائل البريد الإلكتروني.
استخراج عناوين البريد الإلكتروني من النص
أحد أكثر المشكلات شيوعًا التي أواجهها عند إجراء عملية كشط البيانات أو التحقق من صحة قائمة البريد الإلكتروني هو الحصول على رسائل بريد إلكتروني من ملف نصي. عادةً ما تحتوي رسائل البريد الإلكتروني على نمط يسهل على التعبيرات العادية التفاعل مع الملف النصي. بالنسبة لوظيفة البحث عن البريد الإلكتروني، سنفعل شيئًا كهذا:
Find: (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
قد يبدو هذا كثيرًا، لكنه يبحث في الأساس عن أي شيء له النمط <something>@<domain>.com. وبقدر ما تتمتع به التعبيرات العادية من قوة، فهي ليست مثالية. وسوف تفوت أي رسائل بريد إلكتروني تبدأ بنقطة، كما سيتم تجاهل أي شيء غير منسق بشكل صحيح كبريد إلكتروني.
تنسيق معرّفات الوسائط الاجتماعية
عند نقل البيانات من نموذج إلى قاعدة بيانات أو منها، يتعين عليك أحيانًا إصلاح بعض مشكلات التنسيق. ومن الأمثلة الممتازة على ذلك معرّفات الوسائط الاجتماعية. التعبيرات العادية للقيام بذلك هي:
Find: (?:^|[^@\w])[@\s]*(\w{1,30})
Replace: @$1
هذا هو الاستخدام الأكثر قوة لتنسيق مقابض الوسائط الاجتماعية، ولكن كل منصة لها الفروق الدقيقة الخاصة بها لأسماء المستخدمين. لا يمكنك كتابة التحقق من الأخطاء لتلك المقابض المحددة ما لم تستخدم هذا التعبير العادي في نص برمجي لـ Python، على سبيل المثال. ومع ذلك، قد يكون تصحيح أخطاء كود Python الخاص بك باستخدام التعبير العادي أكثر تعقيدًا بعض الشيء.
التعبير العادي ليس حلاً سحريًا
هناك مقولة مفادها أنه إذا كان لديك مطرقة، فإن كل مشكلة تبدأ في الظهور وكأنها مسمار. بصفتي مبرمجًا متمرسًا، يمكنني القول إن هذا صحيح بنسبة 100٪ فيما يتعلق بالتعبير العادي. هناك العديد من الأماكن عبر الإنترنت التي يمكن أن تساعدك في تعلم التعبير العادي، ولكن يجب عليك استخدام هذه المعرفة باعتدال.
قد يؤدي تضمين تعبير عادي في الكود الخاص بك إلى تعقيد عملية التصحيح الخاصة بك. كما أنها لا تصلح للتعليق، مما يجعل مشاركة الكود مع الآخرين أكثر صعوبة. أخيرًا، فهي جزء من نظام التشغيل الآلي؛ إذا كانت بيانات المصدر سيئة، فستكون النتائج سيئة أيضًا. في حين أن التعبير العادي أداة قوية، إلا أنها أفضل لبعض الأشياء من غيرها.