Ich habe eine Zeichenfolge in Ruby:
sentence = "My name is Robert"
Wie kann ich ein Wort in diesem Satz einfach ersetzen, ohne komplexen Code oder eine Schleife zu verwenden?
Ich habe eine Zeichenfolge in Ruby:
sentence = "My name is Robert"
Wie kann ich ein Wort in diesem Satz einfach ersetzen, ohne komplexen Code oder eine Schleife zu verwenden?
Antworten:
sentence.sub! 'Robert', 'Joe'
Verursacht keine Ausnahme, wenn das ersetzte Wort nicht im Satz enthalten ist (die []=
Variante wird es tun).
Das Obige ersetzt nur die erste Instanz von "Robert".
Um alle Instanzen zu ersetzen, verwenden Sie gsub
/ gsub!
(dh "globale Substitution"):
sentence.gsub! 'Robert', 'Joe'
Das Obige ersetzt alle Instanzen von Robert durch Joe.
Wenn Sie sich mit Text in natürlicher Sprache beschäftigen und ein Wort ersetzen müssen, nicht nur einen Teil einer Zeichenfolge, müssen Sie Ihrem gsub eine Prise regulärer Ausdrücke hinzufügen, da eine einfache Textersetzung zu katastrophalen Ergebnissen führen kann:
'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"
Reguläre Ausdrücke haben Wortgrenzen, z. B. \b
welche Übereinstimmungen mit dem Anfang oder Ende eines Wortes übereinstimmen. So,
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
In Ruby sind Wortgrenzen im Gegensatz zu einigen anderen Sprachen wie Javascript UTF-8-kompatibel, sodass Sie sie für Sprachen mit nicht-lateinischen oder erweiterten lateinischen Alphabeten verwenden können:
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
\b
nicht in ihnen funktionieren. In diesen Fällen müssten Sie morphologische Analysegeräte oder ähnliches verwenden. Auch +1 für lustiges Beispiel.
Sie können Folgendes versuchen:
sentence ["Robert"] = "Roger"
Dann wird der Satz:
sentence = "My name is Roger" # Robert is replaced with Roger
IndexError
. Andernfalls führt ein Wort, das nicht Teil des Satzes ist, zu:string not matched (IndexError)
my
) ersetzen ?