a = "foobarfoobarhmm"
Ruby - zastąpić pierwsze wystąpienie podciągu z innym ciągiem
Chcę wyjście jako `„fooBARfoobarhmm”
czyli tylko pierwsze wystąpienie„bar”należy zastąpić„bar”.
a = "foobarfoobarhmm"
Ruby - zastąpić pierwsze wystąpienie podciągu z innym ciągiem
Chcę wyjście jako `„fooBARfoobarhmm”
czyli tylko pierwsze wystąpienie„bar”należy zastąpić„bar”.
Zastosowanie #sub
:
a.sub('bar', "BAR")
String#sub
to, co trzeba, jak Yossi już powiedział. Ale chciałbym użyć wyrażenia regularnego zamiast, ponieważ jest to szybsze:
a = 'foobarfoobarhmm'
output = a.sub(/foo/, 'BAR')
Po prostu wykonałem test porównawczy, a wyrażenie regularne zajmuje o 50% więcej czasu niż użycie łańcucha jako parametru dla sub. –
Sprawdziłem to, a wersja Regexp jest szybsza. Użyłem MRI 1.9.2, 1.9.3, 2.0.0, a nawet JRuby, wszystkie były szybsze w wersji Regexp. Kod testu porównawczego: https://gist.github.com/tbuehlmann/5574713 Chcesz podać swój benchmark? – tbuehlmann
Hmmmm. Muszę przeprosić za moje twierdzenie, wydaje mi się, że popełniłem błąd w moim benchmarku. W rzeczywistości regex jest szybszy. –
zastąpić pierwsze wystąpienie, po prostu to zrobić:
str = "Hello World"
str['Hello'] = 'Goodbye'
# the result is 'Goodbye World'
można nawet użyć wyrażeń regularnych:
str = "I have 20 dollars"
str[/\d+/] = 500.to_s
# will give 'I have 500 dollars'
'500.to_s' jest czasami zapisywane' "500" '. :-) –
Napisałem to tak celowo. aby wskazać, że musisz przypisać ciąg jawny. Ponieważ konwersja nie jest tutaj automatyczna. Jeśli zrobisz to zamiast 'str [/ \ d + /] = 500' otrzymasz błąd' TypeError: no niejawna konwersja Fixnum do String'. –
podziękować! Używałem gsub(), które zastępuje wszystkie wystąpienia. – Sayuj