Mam ciąg w Ruby:
sentence = "My name is Robert"
Jak mogę łatwo zamienić dowolne słowo w tym zdaniu bez użycia złożonego kodu lub pętli?
ruby
ruby-on-rails-3
Mithun Sasidharan
źródło
źródło
my
)?Odpowiedzi:
Nie spowoduje wyjątku, jeśli zastąpionego słowa nie ma w zdaniu (
[]=
wariant zrobi to).Jak zastąpić wszystkie wystąpienia?
Powyższe zastępuje tylko pierwszą instancję „Roberta”.
Aby zastąpić wszystkie wystąpienia, użyj
gsub
/gsub!
(tzn. „Globalne podstawienie”):Powyższe zastąpi wszystkie wystąpienia Roberta Joe.
źródło
Jeśli masz do czynienia z tekstem w języku naturalnym i chcesz zamienić słowo, a nie tylko część ciągu, musisz dodać do gsub szczyptę wyrażeń regularnych, ponieważ zwykłe zastąpienie tekstu może prowadzić do katastrofalnych rezultatów:
Wyrażenia regularne mają granice słów, na przykład takie,
\b
które pasują do początku lub końca słowa. A zatem,W Rubim, w przeciwieństwie do niektórych innych języków, takich jak JavaScript, granice słów są zgodne z UTF-8, więc możesz używać go w językach z alfabetem innym niż łaciński lub rozszerzonym alfabetem łacińskim:
źródło
\b
nie działają w nich, w takich przypadkach należy użyć analizatorów morfologicznych lub podobnych rzeczy. Również +1 za zabawny przykład.Możesz spróbować użyć tej metody:
Wtedy zdanie stanie się:
źródło
IndexError
. W przeciwnym razie słowo nie będące częścią zdania prowadzi do:string not matched (IndexError)
Po pierwsze, nie deklarujesz typu w Ruby, więc nie potrzebujesz pierwszego
string
.Aby zamienić słowo w ciągu, to zrobić:
sentence.gsub(/match/, "replacement")
.źródło