2011-04-03 18 views
8

के साथ नियमित अभिव्यक्ति मैं 'कुल' शब्द का पालन करने वाले मूल्य को अतिरिक्त अभिव्यक्ति लिखने की कोशिश कर रहा हूं लेकिन मुझे यकीन नहीं है कि कैरिज रिटर्न को कैसे संभालना है जिसका मतलब है कि मैं 2 अलग-अलग लाइनों पर खोज कर रहा हूं । क्या किसी को इस तक पहुंचने का सबसे अच्छा तरीका पता है?कैरिज रिटर्न

Taxes&Charges↵ 
↵ 
£ 35.97↵ 
↵ 
Total↵ 
£ 198.98↵ 
↵ 
£ 35.97↵ 
↵ 
↵ 
Total↵ 
£ 333.98 
+2

रेगेक्स का कौन सा स्वाद आप उपयोग कर रहे हैं? – kennytm

+0

यह पूरी तरह से इस बात पर निर्भर करता है कि आप एप्लिकेशन में अपना टेक्स्ट कैसे प्राप्त कर रहे हैं - एक समय में एक पंक्ति या स्ट्रिंग मान में पूरी फ़ाइल, उदाहरण के लिए। साथ ही, यह उस भाषा पर निर्भर करता है जिसका आप उपयोग कर रहे हैं - जबकि अधिकांश रेगेक्स कार्यान्वयन में कई पंक्तियों से निपटने के लिए समान विकल्प कम होते हैं, उन्हें आमंत्रित करने के तरीके अलग-अलग होते हैं। – LHMathies

+0

"अतिरिक्त मूल्य" से आपका क्या मतलब है? – intuited

उत्तर

0

अपने regex को s संशोधक जोड़ें। s का मतलब है स्ट्रिंग को सिंगल लाइन के रूप में। आप पहले str_replace के साथ कैरिज रिटर्न क्यों नहीं हटाते? ओह, कोई PHP टैग नहीं।

6

regex में आप \r का उपयोग करना चाहिए गाड़ी वापसी को पकड़ने के लिए और \r\n लाइन को पकड़ने के लिए

0

टूट जाता है आप, रों जोड़ने एक पंक्ति सूचित करने के लिए है, तो आप (उदाहरण के लिए यदि विंडोज़)

उपयोग कर सकते हैं कुल मूल्य निकालने के लिए

^Total\r\n£([ 0-9.]+)\r\n"। (यदि समर्थित)

(परीक्षण नहीं, कोष्ठक यह सुनिश्चित करना चाहिए कि यह एक समूह मूल्य के रूप में दिखाई देता है)

3

आप का उपयोग करना चाहिए regex विकल्प डॉट न्यू लाइन मेल खाता है।

उदा। .NET में आप इसके लिए RegexOptions.Singleline का उपयोग कर सकते हैं। यह सिंगल लाइन मोड निर्दिष्ट करता है। डॉट (.) का अर्थ बदलता है, इसलिए यह प्रत्येक चरित्र से मेल खाता है (\n को छोड़कर प्रत्येक चरित्र के बजाय)।

अगले अभिव्यक्ति:

Regex ex = new Regex(@"(?<=Total\r\n)£\s?[\d.]+", RegexOptions.Singleline); 

अपने परीक्षण उदाहरण से £ 198.98 और £ 333.98 मूल्यों से मेल खाएगी।

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