2011-11-16 17 views
7

मैं नियमित रूप से अभिव्यक्ति के साथ SQL निर्यात फ़ाइल से डेटा डंप करने का प्रयास कर रहा हूं। पोस्ट सामग्री के क्षेत्र से मेल खाने के लिए, मैं '(?P<content>.*?)' का उपयोग करता हूं। यह ज्यादातर समय ठीक काम करता है, लेकिन यदि फ़ील्ड में '\ n' की स्ट्रिंग होती है तो नियमित अभिव्यक्ति मेल नहीं खाती है। मैं उनसे मिलान करने के लिए नियमित अभिव्यक्ति को कैसे संशोधित कर सकता हूं? धन्यवाद!नियमित अभिव्यक्ति: " n" (newline) वाली स्ट्रिंग से मिलान कैसे करें?

उदाहरण (मैं अजगर उपयोग कर रहा हूँ):

>>> re.findall("'(?P<content>.*?)'","'<p>something, something else</p>'") 
['<p>something, something else</p>'] 

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'") 
[] 

पी.एस. मोटे तौर पर '\' के साथ सभी तारों को बचने वाले पात्रों के रूप में माना जाता है। मैं रेगिक्स को उनके इलाज के लिए कैसे कह सकता हूं?

उत्तर

21

आप DOTALL विकल्प का उपयोग करना चाहिए:

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'", re.DOTALL) 
['<p>something, \n something else</p>'] 

this देखें।

+0

धन्यवाद! इसके अलावा, उदाहरण के लिए, यदि मैंने स्ट्रिंग में '\ a' कहा है, तो इसे '\ x07' में परिवर्तित कर दिया जाएगा। क्या उन्हें रखने के लिए कोई रास्ता है? या अगर इससे कोई फर्क नहीं पड़ता कि मैं उन्हें डेटाबेस में डालता हूं? –

+1

'x x7' पाइथन को कोड 7 के साथ वर्ण का प्रतिनिधित्व करने का एक तरीका है। इसका प्रतिनिधित्व करने का एक और तरीका '\ a' लिखना है। स्ट्रिंग में वास्तव में दोनों मामलों में केवल एक ही चरित्र होता है। आप 'len (" \ x07 ")' और 'len (" \ a ") 'की जांच करके इसकी पुष्टि कर सकते हैं। \ "\" "==" \ x07 "की तुलना करने की कोशिश करें या" "इन" '" \ "" ":" "एक" के लिए खोज रहे हैं। "(" एक ") 'या' 0" के लिए '' xx7 "': '" x x7 "में। ढूँढें (" 0 ")'। परिणाम बहुत जानकारीपूर्ण होना चाहिए। –

+0

हाय एडम! यह अभी भी एक समस्या उत्पन्न कर रहा है, यदि मूल स्ट्रिंग में \ 'परिणाम परिवर्तित हो जाएगा', जो SQL आदेशों को तोड़ देगा। इसलिए स्ट्रिंग "जैसा है" होना महत्वपूर्ण है –

3

डॉट को न्यूलाइन अक्षरों से मेल खाने के लिए आपको डॉटल संशोधक की आवश्यकता है।

re.S
re.DOTALL
बनाओ '।' विशेष चरित्र पर किसी भी चरित्र से मेल खाता है, जिसमें एक नई लाइन भी शामिल है; इस झंडे के बिना, '।' एक नई लाइन को छोड़कर से मेल खाएगा।

यह देखें here on docs.python.org

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