बाद में वायय बन गया, लेकिन इसे वास्तव में इसके सही उत्तर की आवश्यकता है, और एक कारण है। कौन जानता था कि इस सवाल का इतना जटिल जवाब हो सकता है, है ना? जबरदस्त हंसी। लेकिन रेगेक्स में अंतर के आसपास बहुत सारे विचार हैं।
सबसे पहले; कभी भी रेगेक्स में कोई जगह न डालें। ऐसा करने से आपका रेगेक्स अपठनीय और अनजान हो जाएगा। एक अंतरिक्ष को हाइलाइट करने के लिए माउस का उपयोग करने की यादें यह सुनिश्चित करने के लिए कि केवल एक ही स्थान दिमाग में आता है। यह आपके रेगेक्स को तोड़ देगा: , लेकिन यह नहीं होगा: [ ], क्योंकि एक चरित्र वर्ग में पुनरावृत्ति को नजरअंदाज कर दिया जाता है। और यदि आपको रिक्त स्थान की सटीक संख्या की आवश्यकता है, तो आप वास्तव में एक वर्ण वर्ग में देख सकते हैं: [ ]{3}
। चरित्र वर्ग के बिना बनाम दुर्घटनाएं: {3} < - यह वास्तव में 5 रिक्त स्थान की तलाश में है, woops!
दूसरा; Freespacing (?x)
विकल्प को ध्यान में रखें, जो आपके रेगेक्स को टिप्पणी करने योग्य और मुक्त-स्थान योग्य बनाता है। आपको डरना नहीं चाहिए कि उस विकल्प का उपयोग करने वाला कोई व्यक्ति आपके रेगेक्स को तोड़ सकता है क्योंकि आपने इसमें यादृच्छिक कीबोर्ड रिक्त स्थान डालने का निर्णय लिया है। इसके अलावा, (?x)
कुंजीपटल स्थान को अनदेखा करते हैं जब यह एक वर्ण वर्ग के अंदर होता है: [ ]
। इसलिए अपने कीबोर्ड रिक्त स्थान के लिए वर्ण वर्गों का उपयोग करना सुरक्षित है।
तीसरा; इस परिदृश्य में \s
का उपयोग न करने का प्रयास करें। जैसा कि ओमाघोश बताते हैं, इसमें न्यूलाइन भी शामिल हैं (\r
और \n
)। आपके द्वारा वर्णित परिदृश्य उस पर पक्षपात नहीं करेगा। हालांकि, ओमाघोश बताते हैं, आप केवल कीबोर्ड रिक्त स्थान से अधिक चाहते हैं। तो आप जो भी कल्पना करते हैं उसके आधार पर आप या तो [ ]
, [\s-[\r\n]]
, या [\f\t\v\u00A0\u2028\u2029\u0020]
का उपयोग कर सकते हैं। उन विकल्पों में अंतिम दो एक ही बात हैं, लेकिन चरित्र वर्ग घटाव केवल .NET और कुछ अन्य अजीब स्वादों में काम करता है।
चौथा; यह आमतौर पर अधिक निर्मित पैटर्न है: (\s*...\s*)*
।यह कोई समझ नहीं आता है। यह इस जैसा है: (\s*\s*...)*
या यह: (\s*\s*\s*\s*...)*
। क्योंकि पैटर्न दोहराना है। मैं जो कह रहा हूं उसके खिलाफ एकमात्र तर्क यह है कि आपको ...
से पहले रिक्त स्थान पर कब्जा करने की गारंटी होगी। लेकिन एक बार वह वास्तव में कभी नहीं चाहता था। बुरी से बुरी हालत, तो आप इस देख सकते हैं: \s*(...\s*)*
Omaghosh निकटतम जवाब था, लेकिन यह कम से कम सही जवाब है:
Regex.Match(input, @"(?:\d[ ]*){8,}").Groups[0].Value;
या निम्न, अगर हम सवाल सचमुच ले छह विकल्पों कि एकाधिक पंक्तियों में एक ही पाठ में हैं:
Regex.Match(input, @"(?m)^(?:\d[ ]*){8,}$").Groups[0].Value;
या निम्न है, अगर यह एक बड़ा regex का हिस्सा है और एक समूह की जरूरत है:
Regex.Match(input, @"...((?:\d[ ]*){8,})...").Groups[1].Value;
और एक .NET क्लास घटाव, या एक Non-.NET स्पष्ट खाली स्थान के वर्ग के साथ [ ]
को बदलने के लिए स्वतंत्र महसूस:
@"(?:\d[\s-[\r\n]]*){8,}"
// Or . . .
@"(?:\d[\f\t\v\u00A0\u2028\u2029\u0020]*){8,}"
उत्कृष्ट जवाब! –