2011-09-23 10 views

risposta

21

La divisione delle stringhe è decisamente più semplice e più leggibile rispetto a un'espressione regolare. Per le espressioni regolari, è necessario un gruppo di cattura per ottenere la prima corrispondenza. Sarà lo stesso di splitting di stringhe

string.split(/#|Apt/).first 
+3

Vale la pena di passare almeno '2' come secondo argomento di' split' (che significa dividere al massimo due pezzi) dal momento che si desidera solo il primo risultato. Altrimenti questo potrebbe potenzialmente fare molto più lavoro del necessario. –

1

non scrivo in rubino più di tanto, ma sono sicuro che si potrebbe usare un'espressione regolare lungo le linee di

^.*(#|Apt) 

Oppure, se si mette la stringa in un tokenizer, si potrebbe fare qualcosa con quello, ma sarebbe più difficile considerando che stai cercando una parola e non solo un singolo personaggio.

2

Utilizzare il metodo String#[]. Così:

[ 
    '#foo', 
    'foo#bar', 
    'fooAptbar', 
    'asdfApt' 
].map { |str| str[/^(.*)(#|Apt)/, 1] } #=> ["", "foo", "foo", "asdf"] 
3

Scriverò un metodo per chiarire. Qualcosa di simile, ad esempio:

class String 
    def substring_until(substring) 
     i = index(substring) 
     return self if i.nil? 
     i == 0 ? "" : self[0..(i - 1)] 
    end 
end 
Problemi correlati