क्या रेगेक्स 'मार्क से लेकर लाइन के अंत तक सब कुछ कैप्चर करेगा?


122

मेरे पास एक टेक्स्ट फाइल है जो किसी एक के साथ टिप्पणी को दर्शाता है '

कुछ पंक्तियों में दो उद्धरण हैं, लेकिन मुझे पहली 'और पंक्ति फ़ीड के पहले उदाहरण से सब कुछ प्राप्त करने की आवश्यकता है ।

I AL01                  ' A-LINE                            '091398 GDK 33394178    
         402922 0831850 '                                   '091398 GDK 33394179    
I AL02                  ' A-LINE                            '091398 GDK 33394180    
         400722 0833118 '                                   '091398 GDK 33394181    
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182    
         395335 0832203 '                                  '  53198 DJ  33394183    
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418

जवाबों:


170
'.*

मेरा मानना ​​है कि आपको विकल्प की जरूरत है, मल्टीलाइन।


3
यह चरित्र के पहले उदाहरण पर कब्जा कर लेगा और अंतिम पंक्ति के अंत में
किल

90

उपयुक्त रेगेक्स 'वर्ण होगा जिसके बाद किसी भी संख्या के किसी भी नंबर [शून्य वर्ण सहित] स्ट्रिंग / लाइन टोकन के अंत के साथ समाप्त होगा:

'.*$

और अगर आप 'चार के बाद सब कुछ पर कब्जा करना चाहते थे, लेकिन इसे आउटपुट में शामिल नहीं करते हैं, तो आप उपयोग करेंगे:

(?<=').*$

यह मूल रूप से कहता है कि मुझे सभी वर्ण दें जो पंक्ति के अंत तक 'चार का पालन करें।

संपादित करें : यह नोट किया गया है कि $ का उपयोग करते समय निहित है। * और इसलिए कड़ाई की आवश्यकता नहीं है, इसलिए पैटर्न:

'.* 

तकनीकी रूप से सही है, हालांकि यह विशिष्ट होना स्पष्ट है और बाद के कोड रखरखाव के लिए भ्रम से बचना है, इसलिए $ का मेरा उपयोग। यह मेरा मानना ​​है कि हमेशा स्पष्ट व्यवहार की घोषणा करना बेहतर होता है, जहां स्पष्टता पर सवाल उठाया जा सकता है।


1
$ अनावश्यक है। डॉट सामान्य परिस्थितियों में लाइन के अंत में बंद हो जाएगा।
टॉमालक

7
अनावश्यक - लेकिन वह जो करना चाहता है उसके लिए उचित है। यह बाद में एक अनुस्मारक के रूप में कार्य करता है कि यह 'लाइन के अंत तक' से सब कुछ होने की उम्मीद कर रहा है
gnnf

@balabaster: मैंने यह नहीं कहा कि यह गलत था। ;-) यह सिर्फ एक फुटनोट था।
टॉमालक

@Tomalak: आप किसी भी तरह से गलत मतलब निकालने की कोशिश नहीं कर रहे थे, सिर्फ $ के बजाय मेरी पसंद के मेरे तर्क को स्पष्ट कर रहे थे। यह इंगित करने के लिए धन्यवाद।
बेनलाबस्टर

+1 हमेशा शामिल करने के बजाय प्रश्न में वर्ण के बाद सब कुछ शामिल करने का तरीका।
१:30:३० बजे ग्रिजेड्स

22
'.*$

एकल उद्धरण ( ') के साथ शुरू होकर , किसी भी वर्ण ( .) शून्य या अधिक समय ( *) पंक्ति के अंत तक ( ) से मेल खाता है $


यह उत्तर इस बात का एक शानदार उदाहरण है कि कैसे एक आदेश के पीछे तर्क को तोड़ दिया जाए, अच्छा और स्पष्ट!
तिमाह

12

जब मैंने विंडोज़ में (* नोटपैड ++) * की कोशिश की, तो यह अंतिम पंक्ति के अंत तक पहले 'के बाद सब कुछ मेल खाएगा।

उस पंक्ति के अंत तक सब कुछ कैप्चर करने के लिए मैंने निम्नलिखित टाइप किया:

'.*?\n

यह केवल उस पंक्ति के अंत तक 'से सब कुछ कैप्चर करेगा।


6

आपके उदाहरण में मैं निम्नलिखित पैटर्न के लिए जाऊंगा:

'([^\n]+)$

सभी घटनाओं का मिलान करने के लिए बहुस्तरीय और वैश्विक विकल्पों का उपयोग करें।

आपके द्वारा उपयोग किए जा सकने वाले मैच में लाइनफीड शामिल करने के लिए:

'[^\n]+\n

लेकिन यह अंतिम पंक्ति को याद कर सकता है अगर इसमें कोई लाइनफीड नहीं है।

एक पंक्ति के लिए, यदि आपको उस लाइनफ़ीड से मेल खाने की आवश्यकता नहीं है जिसका मैं उपयोग करना चाहता / चाहती हूँ:

'[^$]+$

4

यह सब कुछ 'बैकरेसफेरेंस 1 में सब कुछ पर कब्जा कर लेगा - और सब कुछ' बैकरेफेरेंस 2 में 'के बाद आपको भाषा (\') के आधार पर एपोस्ट्रोफ से बचने की आवश्यकता हो सकती है।

/^([^']*)'?(.*)$/

त्वरित संशोधन: यदि लाइन में '- बैकरेफेरेंस 1 नहीं है तो भी पूरी लाइन को पकड़ना चाहिए।

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string

0

https://regex101.com/r/Jjc2xR/1

/(\w*\(Hex\): w*)(.*?)(?= |$)/gm

मुझे यकीन है कि यह एक काम करता है, यह बुरी तरह से संरचित पाठ में बहु हेक्सा धारा पर कब्जा करेगा

     Space Reservation: disabled
         Serial Number: wCVt1]IlvQWv
   Serial Number (Hex): 77435674315d496c76515776
               Comment: new comment

मैं regex में एक शाश्वत नौसिखिया हूँ, लेकिन मैं यह समझाने की कोशिश करूँगा

(\ w * (हेक्स): डब्ल्यू *): उस पंक्ति में टेक्स्ट ढूंढें जहां स्ट्रिंग में "हेक्स:" है

(। *।) यह दूसरा कैप्चर किया गया पाठ है और इसका मतलब है सब कुछ के बाद

(=! = $) एक सीमा बनाएं जो = और | के बीच का स्थान है

तो दूसरे समूह के साथ, आपके पास मूल्य होगा


यह सवाल नहीं है, क्या यह है?
डेनियल ई।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.