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?
ruby
ruby-on-rails-3
Mithun Sasidharan
quelle
quelle
my
) ersetzen ?Antworten:
Verursacht keine Ausnahme, wenn das ersetzte Wort nicht im Satz enthalten ist (die
[]=
Variante wird es tun).Wie ersetze ich alle Instanzen?
Das Obige ersetzt nur die erste Instanz von "Robert".
Um alle Instanzen zu ersetzen, verwenden Sie
gsub
/gsub!
(dh "globale Substitution"):Das Obige ersetzt alle Instanzen von Robert durch Joe.
quelle
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:
Reguläre Ausdrücke haben Wortgrenzen, z. B.
\b
welche Übereinstimmungen mit dem Anfang oder Ende eines Wortes übereinstimmen. So,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:
quelle
\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:
Dann wird der Satz:
quelle
IndexError
. Andernfalls führt ein Wort, das nicht Teil des Satzes ist, zu:string not matched (IndexError)
Erstens deklarieren Sie den Typ nicht in Ruby, sodass Sie den ersten nicht benötigen
string
.Um ein Wort in einer Zeichenfolge zu ersetzen, gehen Sie wie folgt vor :
sentence.gsub(/match/, "replacement")
.quelle