سؤال

أريد العثور على أي نص في ملف يطابق التعبير العادي للنموذج ر[A-Z]ش (أي مباراة ر متبوعًا بحرف كبير وتطابق آخر ش, ، وقم بتحويل النص المطابق بحيث يصبح الحرف الكبير صغيرًا.على سبيل المثال، بالنسبة إلى regexp x[A-Z]y

xAy

يصبح

xay

و

xZy

يصبح

xzy

إيماكس query-replace تسمح الدالة بالمراجع الخلفية، لكن AFAIK لا تسمح بتحويل النص المطابق.هل هناك وظيفة مدمجة تقوم بذلك؟هل لدى أي شخص وظيفة Elisp قصيرة يمكنني استخدامها؟

تحديث

@ مارسيل ليفي لديه: \, في تعبير بديل يقدم تعبير Elisp (تعسفيًا؟).على سبيل المثال، الحل لما سبق هو

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
هل كانت مفيدة؟

المحلول

يبدو الأمر كذلك ستيف ييج في الواقع نشرت بالفعل الإجابة على هذا قبل بضع سنوات: "لامعة وجديدة:ايماكس 22." قم بالتمرير لأسفل إلى "تغيير الحالة في سلاسل الاستبدال" وسترى رمز المثال الخاص به باستخدام replace-regexp وظيفة.

الإجابة العامة هي أنك تستخدم "\،" لاستدعاء أي تعبير ليسب كجزء من السلسلة البديلة، كما في \,(capitalize \1).عند قراءة نص المساعدة، يبدو أنه في الوضع التفاعلي فقط، ولكن يبدو أن هذا هو المكان الوحيد الذي سيكون فيه ذلك ضروريًا للغاية.

نصائح أخرى

البديل لـ qrr في هذه الحالة هو تسجيل الماكرو وإعادة تشغيله.(isearch-forward-regexp، حدد الحرف، المنطقة السفلية.) أجد وحدات الماكرو أسهل أثناء التنقل، نظرًا لأنك تحصل على تعليقات فورية إذا كان التعبير العادي الخاص بك خاطئًا.

سأفعل ذلك باستخدام وحدة ماكرو أيضًا، ولكن فقط لأن تنفيذ التعليمات البرمجية من داخل سلسلة بديلة للتعبير العادي أمر غير بديهي جدًا بالنسبة لي.إذا كنت تكتب برنامجًا نصيًا دفعيًا أو شيئًا يحتاج إلى العمل بسرعة كبيرة، فمن المؤكد أن \، هو الطريق الصحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top