البحث عن تعبير عادي يتضمن الحروف الأبجدية الرقمية + "&" و";"

StackOverflow https://stackoverflow.com/questions/152218

  •  02-07-2019
  •  | 
  •  

سؤال

ها هي المشكلة:

split=re.compile('\\W*')

يعمل هذا التعبير العادي بشكل جيد عند التعامل مع الكلمات العادية، ولكن هناك مناسبات أحتاج فيها إلى أن يتضمن التعبير كلمات مثل käyttäj&aml;auml;.

ما الذي يجب علي إضافته إلى regex لتضمين ملف & و ; الشخصيات؟

هل كانت مفيدة؟

المحلول

ربما تريد أن تأخذ المشكلة بشكل عكسي، أي.العثور على كل الحرف بدون مسافات:

[^ \t\n]*

أو تريد إضافة الأحرف الإضافية:

[a-zA-Z0-9&;]*

في حالة رغبتك في مطابقة كيانات HTML، يجب عليك تجربة شيء مثل:

(\w+|&\w+;)*

نصائح أخرى

أود أن أعامل الكيانات كوحدة (نظرًا لأنها يمكن أن تحتوي أيضًا على رموز أحرف رقمية)، مما يؤدي إلى التعبير العادي التالي:

(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+

هذا يتطابق

  • إما حرف كلمة (بما في ذلك "_")، أو
  • كيان HTML يتكون من
    • الشخصية "&”,
      • الشخصية "#”,
        • الشخصية "x" متبوعًا برقم سداسي عشري واحد على الأقل، أو
        • رقم عشري واحد على الأقل، أو
      • حرف واحد على الأقل (= الكيان المسمى)،
    • فاصلة منقوطة
  • مرة على الاقل.

/يحرر:شكرًا لـ ΤΖΩΤΖΙΟΥ على الإشارة إلى الخطأ.

يجب عليك إنشاء فئة أحرف تتضمن الأحرف الإضافية.على سبيل المثال:

split=re.compile('[\w&;]+')

هذا ينبغي أن تفعل خدعة.لمعلوماتك

  • \w (الحرف الصغير "w") يطابق أحرف الكلمات (الأبجدية الرقمية)
  • \W (الحرف الكبير W) عبارة عن فئة أحرف ملغاة (بمعنى أنها تطابق أي حرف غير أبجدي رقمي)
  • * يطابق 0 مرات أو أكثر و + يطابق مرة واحدة أو أكثر، لذلك * سوف يتطابق مع أي شيء (حتى لو لم تكن هناك أحرف هناك).

يبدو أن هذه هي الحيلة:

Split=re.compile('(\\W+&\\W+;)*')

شكرا على الاقتراحات.لقد عمل معظمها بشكل جيد مع Reggy، لكنني لا أفهم تمامًا سبب فشلها في إعادة التحويل البرمجي.

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