2011-01-20 11 views
19

मेरे पास एक स्ट्रिंग है। आइए इसे 'टेस्ट' कहते हैं। मैं इस स्ट्रिंग के लिए एक मैच का परीक्षण करना चाहता हूं, लेकिन केवल रेगेक्स के बैकफ्रफ़ का उपयोग करना चाहता हूं।रेगेक्स मैच के लिए परीक्षण कैसे करें

फिर

for line in f.readlines(): 
    if '<a href' in line: 
     if re.match('<a href="(.*)">', line) == 'test': 
     print 'matched!' 

आयात:

मैं कुछ इस तरह कर सकता हूँ? यह निश्चित रूप से काम नहीं करता है, लेकिन मुझे लगता है कि मैं करीब हो सकता हूं? मूल रूप से सवाल यह है कि मैं तुलना के लिए केवल बैकफ्रू वापस कैसे प्राप्त कर सकता हूं?

+0

मैं रेगेक्स के विकास के लिए [रूबुलर] (http://rubular.com/) की अनुशंसा करता हूं - यह एक बड़ा समय बचाने वाला है। यहां एक और सवाल है जहां मैंने किसी समान पैटर्न वाले किसी की सहायता की: http://stackoverflow.com/questions/4716787/problem-with-ruby-regular-expression –

उत्तर

18

re.match केवल स्ट्रिंग के beginning पर मेल खाता है।

def url_match(line, url): 
    match = re.match(r'<a href="(?P<url>[^"]*?)"', line) 
    return match and match.groupdict()['url'] == url: 

उदाहरण उपयोग:

>>> url_match('<a href="test">', 'test') 
True 
>>> url_match('<a href="test">', 'te') 
False 
>>> url_match('this is a <a href="test">', 'test') 
False 

पैटर्न लाइन में कहीं भी हो सकता है, तो re.search का उपयोग करें।

def url_search(line, url): 
    match = re.search(r'<a href="(?P<url>[^"]*?)"', line) 
    return match and match.groupdict()['url'] == url: 

उदाहरण उपयोग:

>>> url_search('<a href="test">', 'test') 
True 
>>> url_search('<a href="test">', 'te') 
False 
>>> url_search('this is a <a href="test">', 'test') 
True 

N.B: यदि आप एक regex का उपयोग करके HTML पार्स करने की कोशिश कर रहे हैं, तो किसी भी आगे जाने से पहले RegEx match open tags except XHTML self-contained tags पढ़ें।

+4

+1 रेगेक्स का उपयोग कर HTML को पार्स करना शांत सलाह का बहुत योग्य है। –

+0

ग्रेट। आपके जवाब के लिए धन्यवाद। मैं टेक्स्ट को कैसे प्रतिस्थापित करूं और फ़ाइल लिखूं? – jml

+1

मुझे यह उल्लेख करना चाहिए कि हालांकि मैंने उस पोस्ट को पढ़ा है, यह भी कहता है कि आप सीमित विधि के लिए इस विधि का उपयोग कर सकते हैं, जो मेरे पास है। मैं एक समेकित पार्सर बनाना नहीं चाहता हूं। – jml

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