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?
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?
>>> import re
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ')
['a', 'b', 'c']
Regular expressions sono bravo in questo:
import re
quoted = re.compile('"[^"]*"')
for value in quoted.findall(userInputtedText):
print value
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
È necessario il punto e virgola alla fine della riga? – User
@jspcal Funziona anche per le virgolette singole? –