عنوان URL الخاص بـ Gruber التعبير العادي في Python

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

  •  22-09-2019
  •  | 
  •  

سؤال

كيف أعيد كتابة هذا طريقة جديدة للاعتراف عناوين العمل في بيثون؟

\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

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top