2009-12-31 9 views
5

मैं इस new way to recognise पते को पायथन में काम करने के लिए कैसे लिखूं?पायबर के यूआरएल नियमित अभिव्यक्ति पायथन

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

+0

कौन सा हिस्सा काम नहीं करता है? –

+0

आप अपने कोड को प्रश्न में क्यों नहीं डालते हैं, उदाहरण के साथ –

+0

@vanity में विफल रहता है, यूनिकोड चरित्र गुणों का उत्तर काम नहीं करेगा। Http://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties –

उत्तर

12

original source कि के लिए कहा गया है करने के लिए ASCII में बराबर है और विशेष रूप से पर्ल "यह पैटर्न सबसे आधुनिक regex कार्यान्वयन में काम करना चाहिए।" पायथन का रेगेक्स कार्यान्वयन आधुनिक और similar to Perl's है लेकिन [: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() कॉल कुछ वर्णों निकल जाता है अंदर चरित्र as required निर्धारित किया है।

संपादित: re.escape का उपयोग करना() तरह ही काम करता है, क्योंकि यह सिर्फ सब कुछ के सामने एक बैकस्लैश चिपक। यह पहली बार मेरे लिए कच्चे लग रहा था, लेकिन निश्चित रूप से इस मामले के लिए ठीक काम करता है।

>>> pat = pat % re.escape(string.punctuation) 
+0

यह सभी ग्रबर के परीक्षणों को पास करता है, जैसा कि pat = pat% re.escape (string.punctuation) – Tobias

+0

@vanity है, इसका उल्लेख करने के लिए अपडेट किया गया है। स्पष्ट ध्यान दें, कि यदि आपका डेटा स्रोत यूनिकोड एक शुद्ध-ASCII समाधान है जैसे string.punctuation अपूर्ण परिणाम दे सकता है। –

+0

यह गैर-ASCII डोमेन और पथ के साथ काम करता है। मेरे पास गैर-अंग्रेजी विराम चिह्न के साथ परीक्षण डेटा नहीं है। – Tobias

5

मुझे नहीं लगता कि अजगर इस अभिव्यक्ति

[-!\"#$%&\'()*+,./:;<=>[email protected]\\[\\\\]^_`{|}~] 
+0

विकिपीडिया गलत है देखें। Http://www.regular-expressions.info/posixbrackets.html के अनुसार, यह कैरेट गायब है। –

+0

ठीक है, अब यह सही है। कृपया अपना उत्तर अपडेट करें। –

+0

हाँ, मेरी पोस्ट अपडेट, धन्यवाद। किसी ने विकिपीडिया को भी अपडेट किया। महान! – YOU

2

अजगर को

[:punct:] 

Wikipedia कहते [:punct:] ही है POSIX bracket expressions नहीं है है।

[:punct:] ब्रैकेट अभिव्यक्ति

[!"#$%&'()*+,\-./:;<=>[email protected][\\\]^_`{|}~] 
+0

सुनिश्चित करें कि आप इसका उपयोग करते समय "कच्चे" स्ट्रिंग ('r' के साथ उपसर्ग) का उपयोग करते हैं, क्योंकि बैकस्लैश से बचने से अन्यथा सही नहीं होगा। –

+0

यह भी ध्यान रखें कि पायथन उन यूनिकोड चरित्र गुणों का समर्थन नहीं करता है: http://stackoverflow.com/questions/1832893 –

+0

दरअसल, वे ठीक संकलित करते हैं लेकिन आप जो भी उम्मीद करते हैं उसे न करें – Tobias

संबंधित मुद्दे