Mam ten ciąg:
"some text\nandsomemore"
Muszę usunąć z niego znak „\ n”. próbowałem
"some text\nandsomemore".gsub('\n','')
ale to nie działa. Jak mam to zrobić? Dziękuje za przeczytanie.
Musisz używać "\n"
nie '\n'
w swoim gsub. Różne cudzysłowy zachowują się inaczej.
Podwójne cudzysłowy "
umożliwiają interpretację znaków i interpolację wyrażeń, np. pozwalają ci używać znaków sterujących uciekających, takich jak \n
reprezentowanie ich prawdziwej wartości, w tym przypadku, nowej linii , i pozwalają na użycie, #{expression}
dzięki czemu możesz wplatać zmienne i, cóż, prawie każde wyrażenie ruby, które lubisz w tekście.
Z drugiej strony, pojedyncze cudzysłowy '
traktują ciąg dosłownie, więc nie ma tu żadnej interpretacji, zamiany, interpolacji ani tego, co masz.
W tym konkretnym przypadku do usunięcia nowych linii lepiej jest użyć metody .delete
lub .tr
String .
tr
jest to lepszy wybór do tego zadania, ale jak mówię, pomyślałem, że lepiej będzie wskazać różnicę w pojedynczych, podwójnych cudzysłowach, kiedy odpowiadam.Jeśli chcesz usunąć ciąg, zamiast go zastępować, możesz użyć
String#delete
(lub jego odpowiednika mutatoraString#delete!
), np .:x
teraz równa się „foofoo”W tym konkretnym przypadku
String#delete
jest bardziej czytelny, niżgsub
ponieważ w rzeczywistości nie zastępujesz łańcucha niczym.źródło
delete
nie jest destrukcyjny, jak wskazano tutaj. Zwraca nowy ciąg.Jeśli chcesz lub nie masz nic przeciwko usunięciu wszystkich początkowych i końcowych białych znaków z ciągu, możesz użyć tej
strip
metody.jak wspomniano tutaj .
edytuj Oryginalny tytuł tego pytania był inny. Moja odpowiedź dotyczy pierwotnego pytania.
źródło
strip
usuwa tylko początkoweNie potrzebujesz do tego wyrażenia regularnego. Użyj tr:
źródło
replace
po prostu zmienia ciąg na nowy, jak przypisanie zmiennej; mając na uwadze, żetr
jest to globalne wyszukiwanie i zastępowanie znak po znaku.użycie
chomp
lubstrip
funkcje z Rubiego:źródło
strip
usuwa tylko początkowePopatrz tutaj:
źródło