2010-12-20 12 views
21

Domyślam się, że jest to łatwe pytanie:Jak usunąć podciągi po określonym znaku w łańcuchu za pomocą Ruby?

Jak to zrobić?

+1

Wierzę, że tytuł jest wystarczająco zrozumiały. Ponadto, przyjąłem odpowiedź Jakuba około 13 godzin temu, po prostu dawałem innym trochę czasu; zwykle ludzie nie odświeżają tej samej strony i czekają na odpowiedzi. – JayX

+1

Edytowanie tytułu nie przynosi ci korzyści. Ma to na celu pomoc innym, którzy szukają odpowiedzi na ten sam problem. Żadne wyjaśnienie twojego tytułu i pytania faktycznie nie rani cię, ponieważ nikt nie przejąłby twojego pytania, jeśli uważają, że jest bezużyteczny. Tylko moje dwa centy. – DJTripleThreat

+1

Pytanie nie wyjaśnia, jak długi jest podciąg, więc jest naprawdę niejasne. Najwyraźniej chciałeś, aby podłańcuch zaczął się zaraz po tym, jak pierwsza instancja pewnego znaku rozszerzy się aż do końca głównego łańcucha. Nie oczekuj, że będziemy czytać w myślach. Inna telepatka może zadać to samo pytanie, ale wymaga innej odpowiedzi, ponieważ chce tylko usunąć podciąg o długości 1. –

Odpowiedz

31
new_str = str.slice(0..(str.index('blah'))) 

alt text

+3

str.slice (/.* r /) – eMgz

+1

Jeśli chcesz dostać się do końca delimeter: 'new_str = str.slice (0 .. (str.index ('blah') + 'blah'.length)) ' – mvndaai

+3

co się stanie, jeśli dany znak nie zostanie znaleziony w ciągu znaków? –

4
str = "Hello World" 
stopchar = 'W' 
str.sub /#{stopchar}.+/, stopchar 
#=> "Hello W" 
+0

Oboje działali, dziękuję! – JayX

23

Uważam, że "Part1?Part2".split('?')[0] jest łatwiejsze do odczytania.

+3

, ale potem trzeba by dodać z powrotem? jeśli chcesz, więc nie sądzę, że odpowiada na twoje dokładne pytanie. – Ivan

+0

Podoba mi się ta odpowiedź, ponieważ nie musisz sprawdzać, czy "?" jest obecny, działa również z każdym innym ciągiem z wyrzucaniem wyjątku. –

7

Jestem zaskoczony nikt zalecane, aby użyć „gsub”

irb> "truncate".gsub(/a.*/, 'a') 
=> "trunca" 

Wersja huk gsub może być używany do modyfikacji ciąg.

+1

Nie masz na myśli '/ (? <= A). * /' Lub '/ a \ K. * /', Aby wykluczyć '' a ''z dopasowania? –

+0

@CarySwoveland tak, tak, lub ponownie wprowadzić znak. Dobry chwyt. – philant

Powiązane problemy