2012-11-02 5 views
6

Volevo sapere come procedere quando sono interessato al testo contenuto tra parole specifiche che utilizzano Ruby. es.Recupero della sottostringa contenuta tra due parole specifiche

@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 " 

Ora voglio estrarre il contenuto CAPITALIZZATO dalla stringa cioè dinamico, ma sempre contenuta entro i due contenitori (container_start e container_end)

+0

quale tecnologia stai usando? – RAJ

+0

Grazie, lavorando su ruby ​​on rails –

+0

se guardi alla regex del tag match html, probabilmente saprai come prenderlo. – HungryCoder

risposta

13

semplice espressione regolare farebbe:

@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

Grazie per la risposta, era un BANG ON. –

+0

Se non avessi trovato questo post (o un post simile), come avrei trovato questa risposta? Questo mi sembra una soluzione che non è molto intuitiva. Solo curioso. – Tass

+0

@ victor-deryagin .. Io sono nuovo a questi, quindi una domanda molto semplice, perché è quella usata in regexp, – twinkle

3

Utilizzando lo stesso regex dato da Victor, si può anche fare

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

Solo per fornire una risposta non regex, è anche possibile utilizzare due .splits con la selezione di voci di array.

=> @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 divide la stringa al testo tra virgolette. [1] seleziona la parte DOPO quel testo. Per il secondo taglio, vuoi la parte PRIMA del "container_end" in modo da selezionare [0].

È necessario lasciare gli spazi nelle due sottostringhe .split per rimuovere gli spazi iniziali e finali. In alternativa, usa .lstrip e .rstrip.

Se ci fossero più stringhe "container_start" e "container_end" sarà necessario regolare i selettori di array per selezionare la porzione corretta di @var tra queste due sottostringhe.