2012-11-02 14 views
6

Chciałem wiedzieć, jak postępować, gdy interesuje mnie tekst zawarty między poszczególnymi słowami za pomocą ruby. np.Pobieranie podciągu zawartego między dwoma określonymi słowami

@var = "Hi, I want to extract container_start ONLY THIS DYNAMIC CONTENT container_end from the message contained between the container_start and container_end " 

Teraz chcę wyodrębnić kapitalizowane treści z napisu czyli dynamicznej ale zawsze zawarty w dwóch pojemników (container_start i container_end)

+0

z której technologii korzystasz? – RAJ

+0

Dzięki, pracując nad rubinem na szynach –

+0

, jeśli zajrzysz do wyrażeń regularnych tagów HTML, prawdopodobnie będziesz wiedział, jak je pobrać. – HungryCoder

Odpowiedz

13

Proste wyrażenie regularne zrobi:

@var = "Hi, I want to extract container_start **ONLY THIS DYNAMIC CONTENT** container_end from the message contained between the container_start and container_end " 
@var[/container_start(.*?)container_end/, 1] # => " **ONLY THIS DYNAMIC CONTENT** " 
+0

Dzięki za odpowiedź, to było BANG ON. –

+0

Jeśli nie znalazłem tego posta (lub podobnego posta), w jaki sposób znalazłem tę odpowiedź? To uderza mnie jako rozwiązanie, które nie jest zbyt intuicyjne. Po prostu ciekawy. – Tass

+0

@ victor-deryagin .. Jestem dla nich nowy, więc bardzo podstawowe pytanie, dlaczego jest to 1 używane w wyrażeniu regularnym, – twinkle

3

Używanie to samo wyrażenie podane przez Victor, można także wykonać:

var.split(/container_start(.*?)container_end/)[1] 
1

Aby zapewnić odpowiedź bez regex, możesz również użyć dwóch .splits z wyborem wpisów tablicy.

=> @var = "Hi, I want to extract container_start ONLY THIS DYNAMIC CONTENT container_end from the message contained between the container_start and container_end " 
=> @var.split("container_start ")[1].split(" container_end")[0] 
=> "ONLY THIS DYNAMIC CONTENT" 

.split dzieli ciąg znaków na tekst w cudzysłowach. [1] wybiera porcję PO TYM tekście. Dla drugiego cięcia, chcesz część PRZED "container_end", więc wybierz [0].

Musisz zostawić spacje w dwóch podciągach, aby usunąć przednie i tylne spacje. Alternatywnie użyj .lstrip i .rstrip.

Jeśli było więcej ciągów "container_start" i "container_end", należy dostosować selektory tablic, aby wybrać odpowiednią część @var między tymi dwoma podciągami.

Powiązane problemy