جدول المحتويات
في السلاسل أدناه ، افترض أنك تريد حذف رقم الطلب الأول. تبدأ كل هذه الأرقام بعلامة التجزئة (#) وتحتوي على 5 أرقام بالضبط. لذلك ، يمكننا تحديدها باستخدام هذا التعبير العادي:
Pattern : # \ d {5} \ b
تحدد حدود الكلمة \ b أن السلسلة الفرعية المطابقة لا يمكن أن تكون جزء من سلسلة أكبر مثل # 10000001.
لإزالة جميع التطابقات ، لم يتم تعريف الوسيطة example_num :
=RegExpReplace(A5, "#\d{5}\b", "")
للقضاء على التكرار الأول فقط ، قمنا بتعيين الوسيطة example_num على 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex لإزالة أحرف معينة
لإزالة أحرف معينة من سلسلة ، ما عليك سوى كتابة جميع الأحرف غير المرغوب فيها وفصلها بشريط عموديبناء جملة خالٍ من قيود VBA RegExp ، وثانيًا ، لا تتطلب إدخال أي كود VBA في المصنفات الخاصة بك حيث يتم تنفيذ كل تكامل التعليمات البرمجية بواسطتنا في الخلفية.
الجزء الخاص بك من المهمة هو إنشاء تعبير عادي و خدمته للوظيفة :) دعني أوضح لك كيفية القيام بذلك في مثال عملي.
كيفية إزالة النص بين قوسين وأقواس باستخدام regex
في السلاسل النصية الطويلة ، معلومات أقل أهمية غالبًا ما يتم وضعه بين [أقواس] و (أقواس). كيف يمكنك إزالة تلك التفاصيل غير ذات الصلة مع الاحتفاظ بجميع البيانات الأخرى؟
في الواقع ، لقد أنشأنا بالفعل تعبيرًا عاديًا مشابهًا لحذف علامات html ، أي النص داخل أقواس زاوية. من الواضح أن نفس الأساليب ستعمل مع الأقواس المربعة والمستديرة أيضًا.
النمط : (\ (. *؟ \))
هل فكرت يومًا في مدى قوة برنامج Excel إذا تمكن شخص ما من إثراء مجموعة أدواته باستخدام التعبيرات العادية؟ لم نفكر فقط بل عملنا عليها :) والآن ، يمكنك إضافة وظيفة RegEx الرائعة هذه إلى مصنفاتك الخاصة ومسح السلاسل الفرعية التي تطابق نمطًا في أي وقت من الأوقات!
الأسبوع الماضي ، بحثنا في كيفية استخدام التعبيرات العادية لاستبدال السلاسل في Excel. لهذا ، أنشأنا وظيفة مخصصة لاستبدال Regex. كما اتضح فيما بعد ، تتجاوز الوظيفة استخدامها الأساسي ولا يمكنها فقط استبدال السلاسل ولكن أيضًا إزالتها. كيف يمكن لذلك ان يحدث؟ فيما يتعلق ببرنامج Excel ، فإن إزالة القيمة ليست شيئًا آخر سوى استبدالها بسلسلة فارغة ، وهو أمر تعتبر وظيفة Regex جيدة جدًا فيه!
وظيفة VBA RegExp لإزالة السلاسل الفرعية في Excel
كما نعلم جميعًا ، لا يتم دعم التعبيرات العادية في Excel افتراضيًا. لتمكينها ، تحتاج إلى إنشاء وظيفة خاصة بك معرّفة من قبل المستخدم. والخبر السار هو أن هذه الوظيفة مكتوبة بالفعل ومختبرة وجاهزة للاستخدام. كل ما عليك فعله هو نسخ هذا الرمز ، ولصقه في محرر VBA الخاص بك ، ثم حفظ الملف كمصنف ممكن بماكرو (.xlsm).
تحتوي الوظيفة على بناء الجملة التالي:
RegExpReplace (نص ، نمط ، استبدال ، [example_num] ، [match_case])الوسيطات الثلاث الأولى مطلوبة ، الوسيطتان الأخيرتان اختياريتان.
المكان:
- نص - السلسلة النصية للبحثممكن حتى يجد قوس إغلاق.
أيًا كان النمط الذي تختاره ، ستكون النتيجة هي نفسها تمامًا.
على سبيل المثال ، لإزالة جميع علامات html من سلسلة في A5 وترك النص ، الصيغة هي:
=RegExpReplace(A5, "]*>", "")
أو يمكنك استخدام المحدد الكمي البطيء كما هو موضح في لقطة الشاشة:
هذا الحل يعمل بشكل مثالي من أجل نص واحد (الصفوف 5 - 9). بالنسبة للنصوص المتعددة (الصفوف 10-12) ، فإن النتائج مشكوك فيها - يتم دمج النصوص من علامات مختلفة في واحدة. هل هذا صحيح ام لا؟ أخشى أنه ليس شيئًا يمكن تحديده بسهولة - كل هذا يتوقف على فهمك للنتيجة المرجوة. على سبيل المثال ، في B11 ، من المتوقع أن تكون النتيجة "A1" ؛ أثناء وجودك في B10 ، قد ترغب في فصل "data1" و "data2" بمسافة.
لإزالة علامات html وفصل النصوص المتبقية بمسافات ، يمكنك المتابعة بهذه الطريقة:
- استبدل العلامات بمسافات "" ، وليس السلاسل الفارغة:
=RegExpReplace(A5, "]*>", " ")
- تقليل المسافات المتعددة إلى حرف مسافة واحد:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- تقليم المسافات البادئة والزائدة:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
ستبدو النتيجة كما يلي:
Ablebits Regex Remove Tool
إذا كانت لديك فرصة لاستخدام Ultimate Suite لبرنامج Excel ، فمن المحتمل أنك اكتشفت بالفعل أدوات Regex الجديدة التي تم تقديمها مع الإصدار الأخير. يكمن جمال وظائف Regex المستندة إلى .NET في أنها ، أولاً ، تدعم التعبير العادي بكامل الميزاتالخيار إزالة ، واضغط على إزالة .
للحصول على النتائج كصيغ ، وليس قيم ، حدد خانة الاختيار إدراج كصيغة .
لإزالة نص داخل أقواس من السلاسل في A2: A5 ، نقوم بتكوين الإعدادات كما يلي:
ونتيجة لذلك ، تم إدراج الوظيفة AblebitsRegexRemove في عمود جديد بجوار البيانات الأصلية.
يمكن أيضًا إدخال الوظيفة مباشرة في خلية عبر مربع الحوار القياسي إدراج دالة ، حيث يتم تصنيفها ضمن AblebitsUDFs .
نظرًا لأن AblebitsRegexRemove مصمم لإزالة النص ، فإنه يتطلب وسيطين فقط - السلسلة المصدر والتعبير العادي. يمكن تعريف كلا المعلمتين مباشرة في صيغة أو توفيرهما في شكل مراجع خلايا. إذا لزم الأمر ، يمكن استخدام هذه الوظيفة المخصصة مع أي وظائف أصلية.
على سبيل المثال ، لقص مسافات إضافية في السلاسل الناتجة ، يمكنك استخدام وظيفة TRIM كغلاف:
=TRIM(AblebitsRegexRemove(A5, $A$2))
هذه هي كيفية إزالة السلاسل في Excel باستخدام التعبيرات العادية. أشكرك على القراءة وأتطلع إلى رؤيتك على مدونتنا الأسبوع المقبل!
التنزيلات المتاحة
إزالة السلاسل باستخدام regex - أمثلة (ملف .xlsm)
Ultimate Suite - نسخة تجريبية (ملف exe.)
في.لمزيد من المعلومات ، يرجى الاطلاع على وظيفة RegExpReplace.
نصيحة. في الحالات البسيطة ، يمكنك إزالة أحرف أو كلمات معينة من الخلايا باستخدام صيغ Excel. لكن التعبيرات العادية توفر الكثير من الخيارات لهذا.
كيفية إزالة السلاسل باستخدام التعبيرات العادية - أمثلة
كما ذكرنا أعلاه ، لإزالة أجزاء من النص تتطابق مع نمط ، عليك استبدالها بسلسلة فارغة. لذلك ، تأخذ الصيغة العامة هذا الشكل:
RegExpReplace (text، pattern، ""، [example_num]، [match_case])توضح الأمثلة أدناه تطبيقات مختلفة لهذا المفهوم الأساسي.
إزالة كل التطابقات أو المطابقة المحددة
تم تصميم وظيفة RegExpReplace للعثور على جميع السلاسل الفرعية المطابقة للتعبير المعتاد. يتم التحكم في التكرارات التي يتم إزالتها بواسطة الوسيطة الاختيارية الرابعة ، المسماة رقم المثال .
القيمة الافتراضية هي "جميع التطابقات" - عندما يكون رقم المثال عامل التشغيل التسلسلي (& amp؛) ووظائف النص مثل RIGHT و MID و LEFT.
على سبيل المثال ، لكتابة جميع أرقام الهواتف بتنسيق (123) 456-7890 ، الصيغة هي:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
حيث B5 هو ناتج وظيفة RegExpReplace.
إزالة الأحرف الخاصة باستخدام regex
في أحد برامجنا التعليمية ، نظرنا في كيفية إزالة الأحرف غير المرغوب فيها في Excel باستخدام وظائف تحمل في ثناياه عوامل ومخصصة. التعبيرات العادية تجعل الأمور أسهل بكثير! بدلاً من سرد جميع الأحرف المراد حذفها ، ما عليك سوى تحديد الأحرف التي تريد الاحتفاظ بها :)
يعتمد النمط على فئات الأحرف التي تم رفضها - يتم وضع علامة الإقحام داخل فئة الأحرف [^ ] لمطابقة أي حرف واحد ليس بين قوسين. يجبره المُحدِّد الكمي على النظر إلى الأحرف المتتالية كمطابقة واحدة ، بحيث يتم استبدال سلسلة فرعية مطابقة بدلاً من كل حرف فردي.
بناءً على احتياجاتك ، اختر أحد الرموز التالية.
لإزالة أحرف غير أبجدية رقمية ، أي جميع الأحرف باستثناء الأحرف والأرقام:
النمط : [^ 0-9a-zA-Z] +
لمسح جميع الأحرف باستثناء الأحرف ، الأرقام و المسافات :
النمط : [^ 0-9a-zA-Z] +
لحذف جميع الأحرف باستثناء الأحرف ، الأرقام و الشرطة السفلية ، يمكنك استخدام \ W الذي يشير إلى أي حرف ليس حرفًا أبجديًا رقميًا أوشرطة سفلية:
النمط : \ W +
إذا كنت تريد الاحتفاظ ببعض الأحرف الأخرى ، على سبيل المثال علامات الترقيم ، ضعها داخل الأقواس.
على سبيل المثال ، لإزالة أي حرف بخلاف الحرف أو الرقم أو النقطة أو الفاصلة أو المسافة ، استخدم التعبير العادي التالي:
النمط : [^ 0-9a-zA-Z \.،] +
هذا يزيل بنجاح جميع الأحرف الخاصة ، ولكن تبقى المسافات الزائدة.
لإصلاح ذلك ، يمكنك دمج الوظيفة المذكورة أعلاه في وظيفة أخرى تحل محل مسافات متعددة بحرف مسافة واحد.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
أو فقط استخدم وظيفة TRIM الأصلية بنفس التأثير :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex لإزالة الأحرف غير الرقمية
لحذف جميع الأحرف غير الرقمية من سلسلة ، يمكنك استخدام إما هذه الصيغة الطويلة أو إحدى التعبيرات النمطية البسيطة جدًا المدرجة أدناه.
تطابق أي حرف ليس رقمًا:
النمط : \ D +
قص الأحرف غير الرقمية باستخدام الفئات النافية:
النمط : [^ 0-9] +
النمط : [^ \ d] +
نصيحة. إذا كان هدفك هو إزالة النص وإسكاب الأرقام المتبقية في خلايا منفصلة أو وضعها جميعًا في خلية واحدة مفصولة بمحدد محدد ، فاستخدم وظيفة RegExpExtract كما هو موضح في كيفية استخراج الأرقام من سلسلة باستخدام التعبيرات العادية.
Regex لإزالة كل شيء بعد مسافة
لمسح كل شيء بعد مسافة ، استخدم إما المسافة () أومسافة بيضاء (\ s) للعثور على المسافة الأولى و. * لمطابقة أي أحرف بعدها.
إذا كان لديك سلاسل من سطر واحد تحتوي فقط على مسافات عادية (القيمة 32 في نظام ASCII المكون من 7 بتات) ، لا يهم حقًا أي من regexes أدناه تستخدمه. في حالة السلاسل متعددة الأسطر ، يحدث فرقًا.
لإزالة كل شيء بعد حرف مسافة ، استخدم هذا التعبير المعتاد:
النمط : ". *"
=RegExpReplace(A5, " .*", "")
ستزيل هذه الصيغة أي شيء بعد المسافة الأولى في كل سطر . لعرض النتائج بشكل صحيح ، تأكد من تشغيل Wrap Text.
لإزالة كل شيء بعد مسافة بيضاء (بما في ذلك مسافة وعلامة تبويب وعلامة إرجاع وسطر جديد) ، هو:
النمط : \ s. *
=RegExpReplace(A5, "\s.*", "")
لأن \ s تطابق بعض أنواع المسافات البيضاء المختلفة بما في ذلك سطر جديد (\ n) ، هذه الصيغة تحذف كل شيء بعد المسافة الأولى في الخلية ، بغض النظر عن عدد الأسطر الموجودة فيها.
Regex لإزالة النص بعد التحديد حرف
باستخدام الطرق من المثال السابق ، يمكنك إزالة النص بعد أي حرف تحدده.
للتعامل مع كل سطر على حدة:
النمط العام : char. *
في سلاسل سطر واحد ، سيؤدي هذا إلى إزالة كل شيء بعد حرف . في السلاسل متعددة الأسطر ، ستتم معالجة كل سطر على حدة لأنه في نكهة VBA Regex ، تتطابق النقطة (.) مع أي حرف باستثناء حرف جديدبداية سلسلة ^ ، نطابق صفرًا أو أكثر من الأحرف غير المسافات [^] * التي تليها مباشرةً مسافة واحدة أو أكثر "+". تمت إضافة الجزء الأخير لمنع المسافات البادئة المحتملة في النتائج.
لإزالة النص قبل المسافة الأولى في كل سطر ، تتم كتابة الصيغة في الوضع الافتراضي "جميع التطابقات" ( رقم المثيل تم حذفه):
=RegExpReplace(A5, "^[^ ]* +", "")
لحذف النص قبل المسافة الأولى في السطر الأول ، وترك جميع الأسطر الأخرى كما هي ، يتم تعيين الوسيطة example_num على 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex لإزالة كل شيء قبل الحرف
أسهل طريقة لإزالة كل النص قبل حرف معين هي باستخدام regex مثل هذا:
النمط العام : ^ [^ char] * char
يُترجم إلى لغة بشرية ، حيث يقول: "من بداية السلسلة التي تم إرساؤها بواسطة ^ ، تطابق 0 أو أكثر من الأحرف باستثناء char [^ char] * حتى التواجد الأول لـ char .
على سبيل المثال ، لحذف كل النص قبل العلامة الأولى ، استخدم هذا التعبير العادي:
Pattern : ^ [^:] *:
لتجنب المسافات البادئة في النتائج ، أضف حرف مسافة بيضاء \ s * إلى النهاية. سيؤدي هذا إلى إزالة كل شيء g قبل النقطتين الأولى وقم بقص أي مسافات بعدها مباشرة:
النمط : ^ [^:] *: \ s *
=RegExpReplace(A5, "^[^:]*:\s*", "")
نصيحة. إلى جانب التعبيرات العادية ، يمتلك Excel وسائله الخاصة لإزالة النص حسب الموضع أو المطابقة. لمعرفة كيفية إنجاز المهمة باستخدام الصيغ الأصلية ،يرجى الاطلاع على كيفية إزالة النص قبل أو بعد حرف في Excel.
Regex لإزالة كل شيء باستثناء
لاستئصال جميع الأحرف من سلسلة ما عدا تلك التي تريد الاحتفاظ بها ، استخدم فئات الأحرف المرفوضة.
على سبيل المثال ، لإزالة جميع الأحرف باستثناء الأحرف الصغيرة والنقاط ، فإن التعبير العادي هو:
النمط : [^ a-z \.] +
في الواقع ، يمكننا الاستغناء عن المُحدد الكمي هنا حيث تحل وظيفتنا محل الكل العثور على مباريات. يعمل المحدد على جعله أسرع قليلاً - بدلاً من التعامل مع كل حرف فردي ، يمكنك استبدال سلسلة فرعية.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex لإزالة علامات html في Excel
أولاً ، تجدر الإشارة إلى أن HTML ليست لغة عادية ، لذا فإن تحليلها باستخدام التعبيرات العادية ليس هو أفضل طريقة. ومع ذلك ، يمكن أن تساعد regexes بالتأكيد في إزالة العلامات من الخلايا الخاصة بك لجعل مجموعة البيانات أكثر نظافة.
نظرًا لوضع علامات html دائمًا بين أقواس زاوية ، يمكنك العثور عليها باستخدام أحد الرموز التالية.
الفئة المنفية:
النمط :] * & gt؛
هنا ، نطابق قوس زاوية الفتح ، متبوعًا بصفر أو أكثر من أي حرف باستثناء قوس إغلاق الزاوية [^ & gt؛] * لأقرب قوس زاوية إغلاق.
بحث كسول:
نمط :
هنا ، نتطابق أي شيء من قوس الفتح الأول إلى قوس الإغلاق الأول. تفرض علامة الاستفهام. * لمطابقة عدد قليل من الأحرف مثلسطر.
لمعالجة كل الأسطر كسلسلة واحدة:
النمط العام : char (.