2012-03-30 8 views
15

मेरे पास एक स्ट्रिंग है और मैं एक ही खोज पैटर्न के साथ और अंत में कुछ मिलान करना चाहता हूं। यह कैसे किया जा सकता है?मैं पाइथन के रेगेक्स में शुरुआत और अंत से कैसे मिलान कर सकता हूं?

मान लें कि हम एक स्ट्रिंग है जैसे:

string = "ftp://www.somewhere.com/over/the/rainbow/image.jpg" 

मैं इस तरह कुछ करना चाहता हूँ:

re.search("^ftp:// & .jpg$" ,string) 

जाहिर है, यह गलत है, लेकिन मैं यह मेरी बात भर में हो जाता है की उम्मीद है। क्या यह संभव है?

+1

क्या आपने दस्तावेज़ों की जांच करना सोचा था? – Marcin

उत्तर

13

re.matchmatch the string at the beginning होगा, इसके विपरीत में re.search करने के लिए उपयोग: यहां ध्यान देने योग्य

re.match(r'(ftp|http)://.*\.(jpg|png)$', s) 

दो बातें:

  • r'' स्ट्रिंग के लिए प्रयोग किया जाता है रेगेक्स
  • के अंदर बैकस्लैश होने के लिए इसे छोटा बनाने के लिए शाब्दिक
  • string एक मानक मॉड्यूल है, इसलिए मैं एक चर
  • रूप s चुना है आप एक बार से एक regex अधिक उपयोग करते हैं, आप एक बार राज्य मशीन का निर्माण करने के लिए उपयोग कर सकते हैं r = re.compile(...) और फिर r.match(s) का उपयोग बाद में तार से मिलान करने के

यदि आप चाहते हैं, आप भी urlparse मॉड्यूल आप के लिए URL पार्स करने के लिए उपयोग कर सकते हैं (लेकिन तब भी विस्तार को निकालने के लिए की जरूरत है):

>>> allowed_schemes = ('http', 'ftp') 
>>> allowed_exts = ('png', 'jpg') 
>>> from urlparse import urlparse 
>>> url = urlparse("ftp://www.somewhere.com/over/the/rainbow/image.jpg") 
>>> url.scheme in allowed_schemes 
True 
>>> url.path.rsplit('.', 1)[1] in allowed_exts 
True 
15

नियमित अभिव्यक्ति का उपयोग कैसे नहीं किया जा रहा है?

if string.startswith("ftp://") and string.endswith(".jpg"): 

क्या आपको नहीं लगता कि यह अच्छा लगता है?

आप प्रारंभ और अंत के लिए एक से अधिक विकल्प का समर्थन कर सकते हैं:

if (string.startswith(("ftp://", "http://")) and 
    string.endswith((".jpg", ".png"))): 
+0

मैं चाहता हूं, लेकिन यह अधिक जटिल है क्योंकि वहां एक वैध प्रारंभिक और समापन अनुक्रम हैं। अगर मुझे पता था कि इस साधारण मामले को कैसे करना है, तो मैं इसे अधिक जटिल वास्तविकता के साथ काम कर सकता हूं। :) –

+1

@Google: आप एकाधिक स्ट्रिंग्स के लिए भी पूछ सकते हैं, मेरा अपडेट देखें। –

3

re.search(r'^ftp://.*\.jpg$' ,string) 

प्रयास करें यदि आप एक नियमित अभिव्यक्ति खोज करना चाहते हैं। ध्यान दें कि आपको इस अवधि से बचना है क्योंकि नियमित अभिव्यक्तियों में इसका विशेष अर्थ है।

2
import re 

s = "ftp://www.somewhere.com/over/the/rainbow/image.jpg" 
print(re.search("^ftp://.*\.jpg$", s).group(0)) 
संबंधित मुद्दे