एक पंक्ति में शब्दों के बीच एक से अधिक स्थानों की घटनाओं की खोज कैसे करें


109

एक पंक्ति में शब्दों के बीच एक से अधिक स्थानों की घटनाओं की खोज कैसे करें

1. this is a line containing  2 spaces
2. this is a line containing   3 spaces
3. this is a line containing multiple spaces first  second   three   four

इस रेगेक्स के लिए उपरोक्त सभी वैध मैच हैं। मुझे किस रेगेक्स का उपयोग करना चाहिए?


क्या आप उस पंक्ति में लगातार रिक्त स्थान या सभी रिक्त स्थान की जाँच करने की कोशिश कर रहे हैं?
सचिन शानबाग सेप

लगातार रिक्त स्थान नहीं सभी रिक्त स्थान
सैम

1
"शब्दों के बीच" से आपका वास्तव में क्या मतलब है? आपके दो उदाहरणों में, एक शब्द और एक अंक के बीच कई रिक्त स्थान हैं। विराम चिह्न के बारे में क्या है (उदाहरण के लिए, क्या आप एक डॉट के बाद और अगले शब्द से पहले कई रिक्त स्थान का मिलान करना चाहते हैं)? किसी पंक्ति में अंतिम वर्ण के पहले / बाद के रिक्त स्थान के बारे में क्या? क्या आप टैब से मेल खाना चाहते हैं? उन लाइनों के बारे में जो व्हाट्सएप के अलावा कुछ नहीं हैं?
टिम पीटरज़

"युक्त और 2", "युक्त और 3", "पहले और दूसरे", "दूसरे और तीन" ... के बीच रिक्त स्थान, हाँ, मैं एक बिंदु के बाद और अगले शब्द से पहले रिक्त स्थान का मिलान करना चाहता हूं।
सैम

जवाबों:


180
[ ]{2,}

अंतरिक्ष (2 या अधिक)

आप यह भी जांच सकते हैं कि उन जगहों से पहले और बाद में शब्दों का पालन किया गया था। (अन्य व्हाट्सएप जैसे टैब या नई लाइनें नहीं)

\w[ ]{2,}\w

एक ही है, लेकिन आप प्रतिस्थापन जैसे कार्यों के लिए केवल रिक्त स्थान चुन सकते हैं

\w([ ]{2,})\w

या देखें कि पहले और बाद में कुछ भी नहीं है, केवल शब्द वर्ण (व्हाट्सएप को छोड़कर) नहीं है

[^\s]([ ]{2,})[^\s]

1
\w'शब्द वर्ण' का अर्थ है, अल्फ़ान्यूमेरिक और अंडरस्कोर, लेकिन अन्य गैर-अंतरिक्ष वर्ण नहीं। गैर-व्हाट्सएप की जांच करने के लिए, \S(राजधानी एस) का उपयोग करें । इसके अलावा, पहले वाला केवल उन रेखाओं से मेल खाएगा जिनमें दो या दो से अधिक रिक्त स्थान होते हैं और कुछ नहीं।
tdammers

मैंने प्रश्न को विकसित करने की कोशिश की। मुझे समझ में आया कि आपने जो कहा था \S, मैं उससे चूक गया , मैं सिर्फ इस तरह की कार्यक्षमता के लिए चरित्र मामले पर भरोसा नहीं करना पसंद करता हूं, यह पढ़ना आसान है।
अलेक्जेंडर

1
आप लंगर का उपयोग क्यों कर रहे हैं? वह लाइनों में कहीं रिक्त स्थान की तलाश कर रहा है।
टिम पीटरज़ ने 21:10

कोई खास वजह नहीं। पहले मुझे लगा कि मुझे उनकी आवश्यकता है, इसलिए मैंने उन सभी को इस प्रक्रिया में घसीटा। वास्तव में, आप सही हैं कि मैं इस मामले में उनका उपयोग करने के लिए गलत हूं। मैं अभी अपना उत्तर संपादित करूंगा।
अलेक्जेंडर

1
\w[ ]{2,}\wमिलान करने में विफल रहेगा word.<2 spaces>more wordsया एक स्ट्रिंग जिसमें पूरी तरह से रिक्त स्थान होंगे। [^\s]([ ]{2,})[^\s]\wरिक्त स्थान या तार के साथ शुरू होने वाली रेखाओं पर विफल हो जाएगा bla<2 spaces>....
टिम Pietzcker

12

सरल समाधान:

/\s{2,}/

यह एक या अधिक व्हाट्सएप पात्रों की सभी घटनाओं से मेल खाता है। यदि आपको पूरी पंक्ति का मिलान करने की आवश्यकता है, लेकिन केवल अगर इसमें दो या दो से अधिक लगातार व्हाट्सएप वर्ण हैं:

/^.*\s{2,}.*$/

अगर व्हाट्सएप को लगातार रहने की जरूरत नहीं है:

/^(.*\s.*){2,}$/

.*आमतौर पर लालची है, जिसका अर्थ है कि यह परीक्षण किया स्ट्रिंग के अंत तक पहुंच जाएगा, और सब जो, इस प्रकार अगर वहाँ अनिवार्य चरित्र, मेल नहीं खाएगी। इस मामले में आमतौर पर यह जोड़ने के लिए एक अच्छी आदत है ?इस तरह, .*?। यह PHP के PCRE
अलेक्जेंडर

यह मेल खाता है। "लालची" का मतलब है कि यह समग्र रूप से पैटर्न से मेल खाते हुए भी यथासंभव मेल खाता है। /^.*b.*$/वास्तव में मैच करता है "foobar", भले ही आप पहले .*से ही पूरी स्ट्रिंग से मिलान करने के लिए पहले लालची की उम्मीद करेंगे ।
tdammers

9

यह रेगेक्स सभी रिक्त स्थान का चयन करता है, आप इसका उपयोग कर सकते हैं और इसे एक ही स्थान से बदल सकते हैं

\s+

अजगर में उदाहरण

result = re.sub('\s+',' ', data))

4

के लिए खोजें [ ]{2,}। यह लाइन के भीतर कहीं भी दो या अधिक आसन्न रिक्त स्थान पाएंगे। यह अग्रणी और अनुगामी स्थानों के साथ-साथ उन रेखाओं से भी मेल खाएगा जो पूरी तरह से रिक्त स्थान से मिलकर बनती हैं। यदि आप ऐसा नहीं चाहते हैं, तो सिकंदर के उत्तर को देखें।

वास्तव में, आप कोष्ठक को छोड़ सकते हैं, वे केवल स्पष्टता के लिए हैं (अन्यथा दोहराए जा रहे अंतरिक्ष वर्ण उस अच्छी तरह से दिखाई नहीं देते हैं :))।

इसके साथ समस्या \s{2,}यह है कि यह विंडोज फाइलों पर नईलाइन्स से मेल खाता है (जहां न्यूलाइन्स को दर्शाया जाता है CRLFया \r\nजिसका मिलान किया जाता है \s{2}

यदि आप भी कई टैब और रिक्त स्थान ढूंढना चाहते हैं, तो उपयोग करें [ \t]{2,}


more than one space between words in a line[ ]{2,}शब्दों के बीच कैसा है ? क्या आपने भी प्रश्न पढ़ा है?
अलेक्जेंडर

यही कारण है कि ओपी वास्तव में जितना सख्त होना चाहता है, मैं उतना ही सख्त होना चाहता हूं। शायद हमें उससे पूछना चाहिए।
टिम Pietzcker

2

यहाँ मेरा समाधान है

[^0-9A-Z,\n]

यह सभी अंकों, अल्पविरामों और नई लाइनों को हटा देगा लेकिन डेटा के सेट जैसे मध्य स्थान का चयन करेगा

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