عنوان URL الخاص بـ Gruber التعبير العادي في Python
سؤال
كيف أعيد كتابة هذا طريقة جديدة للاعتراف عناوين العمل في بيثون؟
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
المحلول
ال المصدر الأصلي لهذا الحالات "يجب أن يعمل هذا النمط في معظم تطبيقات Regex الحديثة" وتحديداً Perl. تطبيق Regex Python حديث و على غرار بيرل لكنه في عداد المفقودين [:punct:]
فئة الشخصية. يمكنك بسهولة بناء ذلك باستخدام هذا:
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
ال re.sub()
المكالمة تهرب من شخصيات معينة داخل مجموعة الأحرف كما هو مطلوب.
تعديل: استخدام RE.ESCAPE () يعمل أيضًا ، لأنه يلتزم بخلع خلفي أمام كل شىء. شعرت بخام بالنسبة لي في البداية ، ولكن بالتأكيد يعمل بشكل جيد لهذه الحالة.
>>> pat = pat % re.escape(string.punctuation)
نصائح أخرى
لا أعتقد أن بيثون لديه هذا التعبير
[:punct:]
ويكيبيديا يقول [:punct:]
هو نفسه ل
[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
بيثون ليس لديه تعبيرات قوسين Posix.
ال [:punct:]
تعبير قوسين مكافئ في ASCII
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]