मैं सरल रीगेक्स बनाने की कोशिश कर रहा हूं जो जांच करेगा कि कोई रेखा खाली है या नहीं।
मामला;
" some" // not blank
" " //blank
"" // blank
मैं सरल रीगेक्स बनाने की कोशिश कर रहा हूं जो जांच करेगा कि कोई रेखा खाली है या नहीं।
मामला;
" some" // not blank
" " //blank
"" // blank
जवाबों:
पैटर्न जो आप चाहते हैं वह कुछ इस तरह है मल्टीलाइन मोड में:
^\s*$
स्पष्टीकरण:
^ स्ट्रिंग एंकर की शुरुआत है।$ स्ट्रिंग एंकर का अंत है।\s व्हाट्सएप चरित्र वर्ग है।* का शून्य या अधिक दोहराव है।मल्टीलाइन मोड में, ^और $लाइन की शुरुआत और अंत से भी मेल खाते हैं।
आप यह भी देख सकते हैं कि क्या एक दी गई स्ट्रिंग line"रिक्त" है (यानी केवल व्हॉट्सएप वाले) trim()इसे-करके, फिर परिणामी स्ट्रिंग की जाँच करें isEmpty()।
जावा में, यह कुछ इस तरह होगा:
if (line.trim().isEmpty()) {
// line is "blank"
}
एंकर के बिना रेगेक्स समाधान को भी सरल बनाया जा सकता है (क्योंकि matchesजावा में कैसे परिभाषित किया गया है) निम्नानुसार है:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
trueअगर और वह भी तब, length()है 0।boolean String.matches(String regex)
if line.strip(): चूंकि एक खाली स्ट्रिंग का मूल्यांकन किया जाता हैFalse
वास्तव में मल्टीलाइन मोड में एक अधिक सही उत्तर यह है:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
स्वीकृत उत्तर: ^\s*$अंतिम पंक्ति के खाली होने पर (मल्टीलाइन मोड में) एक परिदृश्य से मेल नहीं खाता।
इसे इस्तेमाल करे:
^\s*$
\sलाइन टूटने से भी मेल खाती है, इसलिए आप एक स्ट्रिंग के अंदर "खाली" क्रमिक खाली लाइनों वाले "नहीं" पाएंगे।
सबसे पोर्टेबल regex होगा ^[ \t\n]*$कोई रिक्त स्ट्रिंग (ध्यान दें कि आप को बदलने के लिए की आवश्यकता होगी मैच के लिए \tऔर \nटैब और न्यू लाइन तदनुसार के साथ) और [^ \n\t]एक गैर-सफ़ेद स्ट्रिंग के मिलान।
[ \t]
\rताकि रेगेक्स होगा ^[ \t\r\n]*$। लेकिन ^\s*$बेहतर है - अधिक संक्षिप्त। यदि आप newlines से मेल नहीं खाना चाहते हैं, तो आप \h(जिसका अर्थ है क्षैतिज ^\h*$
इस जवाब के लिए bchr02 को पूरा श्रेय । हालाँकि, मुझे खाली लाइन द्वारा अनुसरण की जाने वाली लाइनों (टिप्पणी का अंत) के लिए परिदृश्य को पकड़ने के लिए इसे थोड़ा संशोधित करना पड़ा । रेगेक्स के साथ गैर रिक्त रेखा का मिलान किया गया था ।*/*/
नया: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
मैंने जो भी किया वह ^पंक्ति की शुरुआत को दर्शाने के लिए दूसरे चरित्र के रूप में जोड़ा गया।
खैर ... मैं (नोटपैड + का उपयोग करके) के आसपास छेड़छाड़ की और यह वह समाधान है जो मैंने पाया
\ N \ रों
पंक्ति के अंत के लिए \ n (जहाँ आप मेल खाना शुरू करते हैं) - मेरे मामले में कैरेट की मदद नहीं होगी क्योंकि पंक्ति की शुरुआत एक स्ट्रिंग है \ n अगली स्ट्रिंग तक कोई स्थान नहीं लेता है
आशा करता हूँ की ये काम करेगा
test_vec <- c(" some"," ",""):। आपका समाधान:, grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSEमतदान समाधान grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE:। मतदान समाधान अपेक्षित परिणाम देता है, आपका नहीं।
ctrl+fनोटपैड ++ में कर रहे हैं ? इस स्थिति में आप "विस्तारित" खोज मोड का चयन करके और '\ n \ _' की खोज करके रिक्त लाइनों को (हालांकि मिलान नहीं कर सकते हैं), यदि आप "नियमित अभिव्यक्ति" का चयन करते हैं, तो आपका स्ट्रिंग उसी से मेल खाएगा, और आप कर सकते हैं यह भी कोशिश करें कि @polygenelubricants का समाधान। उत्तरार्द्ध वास्तव में रेखा से मेल खाएगा, आप अंतर की जांच कर सकते हैं और देख सकते हैं। मेरा सुझाव है कि आप जो सलाह दे रहे हैं उसके बारे में अधिक स्पष्ट होने के लिए अपने उत्तर को संपादित करें, ताकि पाठक अधिक मूल्य ले सकें। यह।