web-dev-qa-db-ja.com

文字列内の単語を置き換える - Ruby

Rubyには文字列があります。

sentence = "My name is Robert"

複雑なコードやループを使用せずに、この文の中の任意の1語を簡単に置き換える方法はありますか。

254

この方法を試してみることができます:

sentence ["Robert"] = "Roger"

それから文は次のようになります。

sentence = "My name is Roger" # Robert is replaced with Roger
50
sentence.sub! 'Robert', 'Joe'

置き換えられたWordがセンテンスに含まれていなくても例外を発生させません([]=バリアントはそうします)。

すべてのインスタンスを置き換える方法

上記は "Robert"の最初のインスタンスのみを置き換えます。

すべてのインスタンスを置き換えるには、gsub/gsub!を使用します(つまり、「グローバル置換」)。

sentence.gsub! 'Robert', 'Joe'

上記はRobertのすべてのインスタンスをJoeに置き換えます。

453
srcspider

自然言語のテキストを扱っていて、文字列の一部ではなくWordを置き換える必要がある場合は、プレーンテキストの置換で悲惨な結果が生じる可能性があるため、gsubにピンチの正規表現を追加する必要があります。

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

正規表現には、Wordの先頭または末尾に一致する\bなどのWordの境界があります。したがって、

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

Rubyでは、Javascriptのような他のいくつかの言語とは異なり、単語の境界はUTF-8互換であるため、ラテン語以外のアルファベットまたは拡張ラテンアルファベットの言語に使用できます。

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

まず、Rubyでは型を宣言しないので、最初のstringは必要ありません。

文字列内のWordを置き換えるには、sentence.gsub(/match/, "replacement")とします。

44
Sean Hill