2010-01-16 35 views
18

voglio estrarre informazioni da testo utente-immesso. Immaginate di inserire quanto segue:stringa Estratto fra i corsi

SetVariables "a" "b" "c" 

Come estrarre le informazioni tra la prima serie di citazioni? Quindi il secondo? Quindi il terzo?

risposta

26
>>> import re 
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ') 
['a', 'b', 'c'] 
+0

È necessario il punto e virgola alla fine della riga? – User

+0

@jspcal Funziona anche per le virgolette singole? –

9

Regular expressions sono bravo in questo:

import re 
quoted = re.compile('"[^"]*"') 
for value in quoted.findall(userInputtedText): 
    print value 
20

si potrebbe fare uno string.split() su di esso. Se la stringa è formattata correttamente con le virgolette (cioè il numero pari di virgolette), ogni valore dispari nell'elenco conterrà un elemento tra virgolette.

>>> s = 'SetVariables "a" "b" "c"'; 
>>> l = s.split('"')[1::2]; # the [1::2] is a slicing which extracts odd values 
>>> print l; 
['a', 'b', 'c'] 
>>> print l[2]; # to show you how to extract individual items from output 
c 

Questo è anche un approccio più rapido rispetto alle espressioni regolari. Con il modulo timeit, la velocità di questo codice è circa 4 volte più veloce:

% python timeit.py -s 'import re' 're.findall("\"([^\"]*)\"", "SetVariables \"a\" \"b\" \"c\" ")' 
1000000 loops, best of 3: 2.37 usec per loop 

% python timeit.py '"SetVariables \"a\" \"b\" \"c\"".split("\"")[1::2];' 
1000000 loops, best of 3: 0.569 usec per loop