2009-09-04 8 views
17

अगर मैं की तरह str1 = "IWantToMasterPython"पायथन में 2 अन्य तारों के बीच एक स्ट्रिंग निकालने के लिए कैसे?

एक स्ट्रिंग है मैं ऊपर स्ट्रिंग से "Py" निकालना चाहते हैं की तरह। मैं लिखता हूं:

extractedString = foo("Master","thon") 

मैं यह सब करना चाहता हूं क्योंकि मैं एक HTML पृष्ठ से गीत निकालने की कोशिश कर रहा हूं। गीत <div class = "lyricbox"> ....lyrics goes here....</div> की तरह लिखे गए हैं।

मैं कैसे कार्यान्वित कर सकता हूं पर कोई सुझाव।

उत्तर

30

समाधान एक regexp उपयोग करने के लिए है:

import re 
r = re.compile('Master(.*?)thon') 
m = r.search(str1) 
if m: 
    lyrics = m.group(1) 
+1

अच्छी तरह से जवाब दे दिया। वास्तव में मैं क्या जानना चाहता था। Thanx –

8
def foo(s, leader, trailer): 
    end_of_leader = s.index(leader) + len(leader) 
    start_of_trailer = s.index(trailer, end_of_leader) 
    return s[end_of_leader:start_of_trailer] 

अगर नेता स्ट्रिंग रों में मौजूद नहीं है, या ट्रेलर उसके बाद मौजूद नहीं है (यदि आप निर्दिष्ट नहीं किया है इस ValueError को जन्म देती है क्या व्यवहार आप इस तरह की असंगत परिस्थितियों में चाहते हैं; अपवाद उठाना एक सुंदर प्राकृतिक और पाइथोनिक चीज है, जो कॉलर हैंडल को एक कोशिश के साथ/छोड़कर अगर यह जानती है कि ऐसे मामलों में क्या करना है)।

एक आरई-आधारित दृष्टिकोण भी संभव है, लेकिन मुझे लगता है कि यह शुद्ध-स्ट्रिंग दृष्टिकोण सरल है।

2

यदि आप किसी HTML पृष्ठ से कोई डेटा निकाल रहे हैं, तो मैं दृढ़ता से BeautifulSoup लाइब्रेरी का उपयोग करने का सुझाव दूंगा। मैंने इसे एचटीएमएल से डेटा निकालने के लिए भी इस्तेमाल किया और यह बहुत अच्छा काम करता है।

11

सुंदरसप जो आप चाहते हैं उसे करने का सबसे आसान तरीका है। ऐसा लगता है कि स्थापित किया जा सकता: तुम क्या चाहते करने के लिए

sudo easy_install beautifulsoup 

नमूना कोड है:

from BeautifulSoup import BeautifulSoup 

doc = ['<div class="lyricbox">Hey You</div>'] 
soup = BeautifulSoup(''.join(doc)) 
print soup.find('div', {'class': 'lyricbox'}).string 

आप यूआरएल सीधे से सामग्री हड़पने के लिए पायथन के urllib उपयोग कर सकते हैं। Beautiful Soup doc भी सहायक है यदि आप कुछ और पार्सिंग करना चाहते हैं।

+1

यह निश्चित रूप से इसके बारे में सही तरीका है कि वह कहता है कि वह इसका उपयोग कर रहा है। – wxs

+0

+1, यह बहुत मदद करता है ... धन्यवाद – mshsayem

+1

अच्छी तरह से डाल दिया। क्या मेरा उद्देश्य था। यह वास्तव में मदद करता है। –

2

आप भी इस कोशिश करता है, तो अपने किसी सूची में सभी घटनाओं उत्पादन चाहते हैं कर सकते हैं:

import re 
str1 = "IWantToMasterPython" 

out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1) 
if out : 
    print out 
संबंधित मुद्दे