शब्दों को एक स्ट्रिंग में बदलें - रूबी


281

मुझे रूबी में एक स्ट्रिंग है:

sentence = "My name is Robert"

मैं जटिल कोड या लूप का उपयोग किए बिना इस वाक्य में किसी भी एक शब्द को आसानी से कैसे बदल सकता हूं?


किस तरीके से बदलें? एक मनमाना शब्द (शब्द # 2), या एक विशिष्ट शब्द ( my) बदलें ?
ब्लेंडर

आपके लघु, सरल और उपयोगी प्रश्न के लिए धन्यवाद। इसने मुझे मेरे विचार में स्टाइल हैशटैग का हल ढूंढने में मदद की
स्टेफ हेज

जवाबों:


494
sentence.sub! 'Robert', 'Joe'

यदि अपवाद शब्द वाक्य में नहीं है तो कोई अपवाद नहीं []=होगा ( वैरिएंट)।

सभी उदाहरणों को कैसे बदलें?

उपरोक्त "रॉबर्ट" का केवल पहला उदाहरण है।

सभी उदाहरणों का उपयोग करने के लिए gsub/ gsub!(यानी "वैश्विक प्रतिस्थापन"):

sentence.gsub! 'Robert', 'Joe'

उपरोक्त जोए के साथ रॉबर्ट के सभी उदाहरणों को प्रतिस्थापित करेगा।


यह केवल पहले उदाहरण को प्रतिस्थापित करने के लिए लगता है, जो निश्चित रूप से कभी-कभी ठीक होता है और कभी-कभी नहीं।
जेसन स्वेट सेप

@JasonSwett ने सभी उदाहरणों को बदलने के लिए कवर करने का उत्तर अपडेट किया।
srcspider

128

यदि आप प्राकृतिक भाषा पाठ के साथ काम कर रहे हैं और एक शब्द को बदलने की जरूरत है, न कि केवल एक स्ट्रिंग का हिस्सा, तो आपको अपने gsub में एक नियमित पाठ के भावों को जोड़ना होगा क्योंकि एक सादे पाठ प्रतिस्थापन से विनाशकारी परिणाम हो सकते हैं:

'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"

नियमित अभिव्यक्तियों में शब्द सीमाएँ होती हैं, जैसे कि \bकिसी शब्द की शुरुआत या अंत। इस प्रकार,

'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"

रूबी में, जावास्क्रिप्ट जैसी कुछ अन्य भाषाओं के विपरीत, शब्द सीमाएँ UTF-8-संगत हैं, इसलिए आप इसे गैर-लैटिन या विस्तारित लैटिन अक्षरों के साथ भाषाओं के लिए उपयोग कर सकते हैं:

'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"

6
ध्यान दें कि कुछ भाषाएं भी रिक्त स्थान का उपयोग \bनहीं करती हैं , इसलिए उन में काम नहीं करता है, आपको उन मामलों में रूपात्मक विश्लेषक या सामान का उपयोग करने की आवश्यकता होगी। इसके अलावा, प्रफुल्लित करने वाला उदाहरण के लिए +1।
नीयनस्क्रिप्ट

57

आप इस तरह से कोशिश कर सकते हैं:

sentence ["Robert"] = "Roger"

फिर वाक्य बन जाएगा:

sentence = "My name is Roger" # Robert is replaced with Roger

4
यह काफी दिलचस्प है। मैंने प्रतिस्थापन का यह तरीका पहले कभी नहीं देखा है।
सीन हिल

6
यदि मूल स्ट्रिंग में वह शब्द नहीं है जिसे आप बदलने का प्रयास कर रहे हैं तो क्या आपको इस विधि से कोई त्रुटि नहीं मिलेगी?
15 अगस्त को srcspider

2
बस यह सुनिश्चित करें कि पर फिर से शुरू करें IndexError। अन्यथा एक शब्द के लिए वाक्य का हिस्सा नहीं होगा:string not matched (IndexError)
कोनराड रीच

9
इस विधि के साथ एक और समस्या यह है कि यह केवल स्ट्रिंग के पहले उदाहरण को बदल देता है।
मार्टिन कोंकणी

14
यह दिलचस्प है, लेकिन निश्चित रूप से सही उत्तर के रूप में चिह्नित नहीं किया जाना चाहिए।
नील्स एबिल्डगार्ड

46

सबसे पहले, आप रूबी में प्रकार की घोषणा नहीं करते हैं, इसलिए आपको पहले की आवश्यकता नहीं है string

स्ट्रिंग में एक शब्द बदलने के लिए, आप ऐसा करेंगे: sentence.gsub(/match/, "replacement")

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