2011-01-15 18 views
7

काम नहीं कर रहा मैं निम्नलिखित कोड का उपयोग कर रहा regexअजगर

<input type="text" value="http://uploadir.com/u/bb41c5b3" /> 

यह कुछ भी नहीं है, पाता है जब मैं खोजने के लिए यह उम्मीद कर रहा हूँ : http://uploadir.com/u/bb41c5b3। मैं क्या गलत कर रहा हूं?

मैं regex http://gskinner.com/RegExr/ का उपयोग कर परीक्षण किया है और यह सही हो रहा है। क्या मुझसे कोई चूक हो रही है?

उत्तर

6
>>> import re 
>>> html = '<input type="text" value="http://uploadir.com/u/bb41c5b3" />'; 
>>> regex = r'http://uploadir.com/u/([^"]+)' 
>>> link = re.findall(regex, html) 
>>> link 
['bb41c5b3'] 
>>> 
+0

आप प्रतिभाशाली! बहुत बहुत धन्यवाद! निश्चित>>> के रूप में चिह्नित करने के लिए 5 मिनट का इंतजार करना होगा – matthewgall

6

कच्चे तार के साथ सभी regex पैटर्न बनाने की आदत में जाओ:,

In [18]: '\b' 
Out[18]: '\x08' 

In [19]: r'\b' 
Out[19]: '\\b' 

'\b' एक ASCII बैकस्पेस है, जबकि r'\b' एक है:

In [16]: re.findall("http://uploadir.com/u/(.*)\b", '<input type="text" value="http://uploadir.com/u/bb41c5b3" />') 
Out[16]: [] 

In [17]: re.findall(r"http://uploadir.com/u/(.*)\b", '<input type="text" value="http://uploadir.com/u/bb41c5b3" />') 
Out[17]: ['bb41c5b3'] 

अंतर की वजह से किया जा रहा है \binterpreted differently है दो पात्रों से बना स्ट्रिंग, बैकस्लैश और बी।

+0

आपकी लाइनें समान हैं, शायद पहली पंक्ति पर अतिरिक्त 'आर' है? –

+0

@ मार्क ई: धन्यवाद। सही किया। – unutbu

+0

तो कच्चे तार कुंजी हैं .... आपकी मदद के लिए बहुत बहुत धन्यवाद! कच्चे तारों के महत्व पर जोर देने के लिए – matthewgall