শব্দগুলিকে একটি স্ট্রিংয়ে প্রতিস্থাপন করুন - রুবি


281

আমার রুবিতে একটি স্ট্রিং রয়েছে:

sentence = "My name is Robert"

জটিল কোড বা লুপ ব্যবহার না করে এই বাক্যটিতে যে কোনও একটি শব্দ সহজেই প্রতিস্থাপন করতে পারি?


কীভাবে প্রতিস্থাপন? একটি সালিশী শব্দ (শব্দ # 2), বা একটি নির্দিষ্ট শব্দ ( my) প্রতিস্থাপন করুন ?
ব্লেন্ডার

আপনার সংক্ষিপ্ত, সহজ এবং দরকারী প্রশ্নের জন্য ধন্যবাদ। এটি আমার দৃষ্টিভঙ্গিতে স্টাইল হ্যাশট্যাগগুলির সমাধান খুঁজে পেতে সহায়তা করেছে
স্টিফ হেজ

উত্তর:


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

প্রতিস্থাপিত শব্দটি বাক্যে না থাকলে ব্যতিক্রম ঘটায় না ( []=ভেরিয়েন্ট উইল)।

কিভাবে সমস্ত দৃষ্টান্ত প্রতিস্থাপন?

উপরেরগুলি কেবল "রবার্ট" এর প্রথম উদাহরণটি প্রতিস্থাপন করে।

সমস্ত দৃষ্টান্ত প্রতিস্থাপন করতে gsub/ gsub!(অর্থাত্ "গ্লোবাল প্রতিস্থাপন") ব্যবহার করুন:

sentence.gsub! 'Robert', 'Joe'

উপরেরটি রবার্টের সমস্ত দৃষ্টান্ত জো দিয়ে প্রতিস্থাপন করবে।


এটি কেবল প্রথম উদাহরণটিকে প্রতিস্থাপন করবে বলে মনে হয় যা অবশ্যই কখনও কখনও সূক্ষ্ম হয় এবং কখনও কখনও তাও হয় না।
জেসন সোয়েট

@ জেসনসওয়েট সমস্ত দৃষ্টান্ত কীভাবে প্রতিস্থাপন করবেন সে বিষয়ে উত্তরটি আপডেট করেছে।
srcspider

128

যদি আপনি প্রাকৃতিক ভাষার পাঠ্য নিয়ে কাজ করে থাকেন এবং কোনও স্ট্রিংয়ের অংশ নয়, একটি শব্দ প্রতিস্থাপনের প্রয়োজন হয় তবে আপনাকে আপনার জিএসউবে একটি চিমটি নিয়মিত ভাব যোগ করতে হবে কারণ একটি সরল পাঠ্য প্রতিস্থাপনের কারণে বিপর্যয়কর ফলাফল হতে পারে:

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

নিয়মিত প্রকাশের শব্দের সীমা থাকে যেমন \bকোনও শব্দের শুরু বা শেষের সাথে ম্যাচ হয়। সুতরাং,

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

জাবি স্ক্রিপ্টের মতো অন্য কয়েকটি ভাষার মতো রুবিতে শব্দের সীমাগুলি ইউটিএফ -8-সামঞ্জস্যপূর্ণ, তাই আপনি এটি লাতিন বা বর্ধিত ল্যাটিন বর্ণমালা সহ ভাষার জন্য ব্যবহার করতে পারেন:

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

6
মনে রাখবেন যে কিছু ভাষাগুলি এমনকি স্পেস ব্যবহার \bকরে না , সুতরাং সেগুলিতে কাজ করে না, আপনাকে এই ক্ষেত্রে মরফোলজিকাল বিশ্লেষক বা এর মতো স্টাফ ব্যবহার করতে হবে। এছাড়াও, হাসিখুশি উদাহরণের জন্য +1।
নিসস্ক্রিপ্ট

57

আপনি এইভাবে ব্যবহার করে দেখতে পারেন:

sentence ["Robert"] = "Roger"

তাহলে বাক্যটি হয়ে যাবে:

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

4
এটা বেশ আকর্ষণীয়। আমি প্রতিস্থাপনের এই পদ্ধতিটি আগে কখনও দেখিনি।
শান হিল

6
আপনি যদি প্রতিস্থাপনের চেষ্টা করছেন মূল স্ট্রিংটিতে শব্দটি না থাকে তবে আপনি কি এই পদ্ধতিতে ত্রুটি পাবেন না?
srcspider

2
কেবল পুনরায় চালু করার বিষয়টি নিশ্চিত করুন IndexError। অন্যথায় শব্দের অংশ না হয়ে শব্দের জন্য:string not matched (IndexError)
কনরাড রেইচে

9
এই পদ্ধতির সাথে আরেকটি সমস্যা হ'ল এটি কেবল স্ট্রিংয়ের প্রথম উদাহরণটিকে প্রতিস্থাপন করে।
মার্টিন কনেকনি

14
এটি আকর্ষণীয়, তবে অবশ্যই সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত নয়।
নীলস অ্যাবিল্ডগার্ড

46

প্রথমত, আপনি রুবি প্রকারটি ঘোষণা করেন না, সুতরাং আপনার প্রথমটির দরকার নেই string

স্ট্রিং একটি শব্দ প্রতিস্থাপন করতে, আপনাকে যা করতে: sentence.gsub(/match/, "replacement")

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.