मैं रूबी स्ट्रिंग के भीतर से स्ट्रिंग "\ n" कैसे हटा सकता हूं?


115

मेरे पास यह स्ट्रिंग है:

"some text\nandsomemore"

मुझे इससे "\ n" निकालने की आवश्यकता है। मैंने कोशिश की

"some text\nandsomemore".gsub('\n','')

लेकिन यह काम नहीं करता है। मैं यह कैसे करुं? पढ़ने के लिए धन्यवाद।

जवाबों:


172

आपको अपने gsub में उपयोग करने की आवश्यकता "\n"नहीं '\n'है। अलग-अलग भाव चिह्न अलग-अलग व्यवहार करते हैं।

दोहरे उद्धरण "वर्ण विस्तार और अभिव्यक्ति प्रक्षेप अर्थात् अनुमति देते हैं। वे आपको बच गए नियंत्रण वर्णों का उपयोग करने देते हैं जैसे \nकि उनके असली मूल्य का प्रतिनिधित्व करते हैं, इस मामले में, नई रेखा, और इसके उपयोग की अनुमति दें #{expression}जिससे आप चर और अच्छी तरह से, बहुत ही रूबी अभिव्यक्ति को पाठ में पसंद कर सकें।

दूसरी ओर, एकल उद्धरण 'शाब्दिक रूप से स्ट्रिंग का इलाज करते हैं, इसलिए कोई विस्तार, प्रतिस्थापन, प्रक्षेप या आपके पास क्या नहीं है।

इस विशेष मामले में, नईलाइन्स को हटाने के लिए .deleteया तो .trस्ट्रिंग विधि का उपयोग करना बेहतर है

और अधिक जानकारी के लिए यहां देखें


17
उचित वाक्यविन्यास वास्तव में होगा .gsub (/ \ n /, "")
boulder_ruby

2
@ डेविड सही है। हालांकि, मुझे लगा कि यह दिखाना महत्वपूर्ण है कि उद्धरणों से फर्क पड़ता है, क्योंकि इस बिंदु पर बेन को लाभ होगा। डेविड, डेविड, यह "सही" की तुलना में शायद शैली का मामला है। व्यक्तिगत रूप से मुझे लगता trहै कि इस कार्य के लिए एक बेहतर विकल्प है, लेकिन जैसा कि मैं कहता हूं, मैंने जवाब देने पर सिंगल, डबल कोट्स में अंतर को इंगित करना बेहतर समझा।
ओसोडो

60

जब आप एक स्ट्रिंग निकालना चाहते हैं, तो इसे बदलने के बजाय आप String#delete(या इसके उत्परिवर्ती समकक्ष String#delete!) का उपयोग कर सकते हैं , उदाहरण के लिए:

x = "foo\nfoo"
x.delete!("\n")

x अब "फूफो" के बराबर है

इस विशिष्ट मामले String#deleteकी तुलना में अधिक पठनीय है gsubक्योंकि आप वास्तव में कुछ के साथ स्ट्रिंग की जगह नहीं ले रहे हैं।


3
रूबी 1.9.3 में कम से कम, deleteविनाशकारी नहीं है जैसा कि यहां बताया गया है। यह एक नया स्ट्रिंग लौटाता है।
ब्रेंट डिलिंघम

अच्छी तरह से देखा गया। मैंने उस कोड स्निपेट को म्यूटेटर संस्करण का उपयोग करने के लिए स्ट्रिंग # हटा दिया है! स्ट्रिंग # डिलीट करने के बजाय
पॉल लीडर

56

यदि आप चाहते हैं या आपके स्ट्रिंग से सभी प्रमुख और अनुगामी व्हाट्सएप को हटाने का मन नहीं है, तो आप stripविधि का उपयोग कर सकते हैं ।

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

जैसा कि यहाँ बताया गया है

संपादित करें इस प्रश्न के लिए मूल शीर्षक अलग था। मूल प्रश्न के लिए मेरा उत्तर है।


2
इस सवाल का जवाब नहीं है। stripकेवल प्रमुख और अनुगामी व्हाट्सएप
thelostspore

1
@mvdanj जी, इस विशेष प्रश्न के विवरण को देखते हुए इसका उत्तर नहीं दिया गया है, लेकिन यह केवल शीर्षक के आधार पर प्रश्न का उत्तर देता है। मुझे संदेह है कि लोगों ने इसे उपयोगी क्यों पाया है।
थॉमस डब्ल्यूडब्ल्यू

शीर्षक को उस समय से बदल दिया गया था जब मैंने मूल रूप से उत्तर दिया था।
थॉमसडब्ल्यू

29

इसके लिए आपको regex की आवश्यकता नहीं है। ट्रे का उपयोग करें:

"some text\nandsomemore".tr("\n","")

एक प्रतिस्थापन के बीच अंतर क्या है?
अर्नाल्ड रोआ

replaceबस स्ट्रिंग को एक नए रूप में बदलता है, जैसे चर असाइनमेंट; जबकि trएक चरित्र-दर-चरित्र वैश्विक खोज और प्रतिस्थापित है।
मार्क थॉमस

19

रूबी से उपयोग chompया stripकार्य:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"

2
इस सवाल का जवाब नहीं है। stripकेवल प्रमुख और अनुगामी व्हाट्सएप
thelostspore

2
chomp सबसे अच्छा तरीका है ... विश्वास नहीं हो सकता है कि यह बहुत ही कम है
user1735921

chomp विधि में, \ n और \ r को str के अंत से हटा दिया जाता है यदि वे मौजूद हैं, तो बीच में नहीं। इसलिए यह ओपी प्रश्न को हल नहीं करता है
सिल्वा 96

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