Thursday, 15 August 2013

regex - I'm using PSPad and need a regular expression that will find 4 numbers in a six number set -


मेरे पास निम्न स्वरूप में डेटा के पेज हैं:

{1,2,3,4, 5,6} {1,3,4,5,6,7} {1,2,4,5,6,7} {1,2,3,5,6,7}

स्पष्टीकरण के लिए, मैं प्रत्येक आवृत्ति को 6 कॉमा से अलग किए गए नंबरों को {}, एक "शब्द" से घिरी कर सकता हूं।

तो ऊपर दिए गए उदाहरण में, {1,2,3,4,5, 6} एक शब्द होगा।

तो मैं जो कुछ करने की कोशिश कर रहा हूं वह प्रत्येक शब्द ढूंढता है जिसमें मेरे 4 नंबर का चयन होता है उदाहरण के लिए, ऊपर दिए गए नमूने में, मैं सभी 1 शब्द, 2, 6 और 7 वाले सभी शब्दों को खोजना चाहूंगा। यहां मुख्य बिंदु AND है I मुझे पता है कि 1, 2, 6 या 7 को कैसे ढूंढें - मुझे और की आवश्यकता है यदि संभव हो तो, मैं पूरे शब्द को बदलना चाहूंगा, लेकिन अगर यह सिर्फ संख्या पाता है, तो मैं शेष नियमित 2 अंकों की एक और नियमित अभिव्यक्ति के साथ हटा सकता हूं।

मेरे डेटा के बारे में कुछ और जानकारी: नंबर 1-25 से लेकर (इसलिए मुझे उस चीज़ की ज़रूरत है जो 1 या 1 या 20-25 सहित बिना नंबर 1 या बिना 1 1 या 2 के बिना बिना 1 की खोज करने की क्षमता है।) एक ही शब्द के भीतर किसी संख्या का दोहराना कभी नहीं होता है एक शब्द के भीतर की संख्या हमेशा निम्नतम (1) से लेकर उच्चतम (25) तक होती है।

< मजबूत> अपडेट करें:

आपने बताया कि आप PSPad का उपयोग कर रहे हैं और संपादक में ऐसा करना चाहते हैं। मुझे नहीं लगता कि यह नियमित अभिव्यक्ति का उपयोग कर संभव है। मैं awk या आपकी पसंद की प्रोग्रामिंग भाषा का उपयोग करूँगा।


यहां awk का उपयोग करते हुए एक उदाहरण आता है:

  awk '{for (i = 1; i & lt; = nf; i ++) अगर ($ i ~ / y1 \ y / & amp; $ i ~ / \ y2 \ y / और amp; $ i ~ / \ Y6 \ y / & amp; $ i ~ / \ y7 \ y /) $ i = ""} 1 'input.txt  

स्पष्टीकरण:

लूप के लिए एक पंक्ति के सभी क्षेत्रों में गड़ता है, यदि स्थिति जांच करता है तो यह फ़ील्ड सभी आवश्यक संख्याओं से मेल खाती है। अगर यह सभी संख्याओं से मेल खाती है, तो फ़ील्ड काट दिया जाता है आउटपुट सीमांकक (जो डिफ़ॉल्ट रूप से इनपुट सीमांकक है) द्वारा विभाजित सभी क्षेत्रों को मुद्रित करने के लिए निम्न 1 एक awk मुहावर है।

संख्या के बारे में मिलान, मैं संख्या से पहले और बाद में एस्केप अनुक्रम \ y का उपयोग कर रहा हूं:

  $ i ~ / y1 \ y /  

\ y एक शब्द सीमा से मेल खाता है, जो इस मामले में या तो { एक , या } को बंद करने के लिए यह सुनिश्चित करने के लिए कि ऊपर दिए गए पैटर्न केवल 1 से मेल खाते हैं लेकिन उदाहरण के लिए 11 से मेल नहीं खाते।

आउटपुट:

  {1,2,3,4,5,6} {1,3,4,5,6, 7}  

बीटीडब्लू, उपरोक्त लिपि को और अधिक पठनीय और रखरखाव हो सकता है यदि आप इसे किसी फाइल में सहेज सकते हैं:

remove.awk < / (I = 1; i & lt; = NF; i ++) के लिए इनपुट के हर पंक्ति पर लागू होता है {# यह जांचें कि क्या फ़ील्ड सभी आवश्यक नंबरों से मेल खाती है अगर (\ $ I ~ / \ y1 \ y / \ & amp; amp; $ I ~ / \ y2 \ y / \ & amp; amp; $ I ~ / \ y6 \ y / \ & amp; amp; $ I ~ / \ y7 \ y / \) {# फ़ील्ड $ i = ""}} # # संशोधित लाइन प्रिंट प्रिंट करें

आप इस तरह से स्क्रिप्ट कॉल कर सकते हैं:

  awk -f remove.awk input.txt  

No comments:

Post a Comment