web-dev-qa-db-fra.com

Extraire la chaîne entre les guillemets

Je souhaite extraire des informations du texte saisi par l'utilisateur. Imaginez que je saisisse ce qui suit:

SetVariables "a" "b" "c"

Comment extraire des informations entre la première série de devis? Alors le deuxième? Alors le troisième?

27
Reznor
>>> import re
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ')
['a', 'b', 'c']
40
jspcal

Vous pouvez faire un string.split () dessus. Si la chaîne est correctement formatée avec les guillemets (c'est-à-dire le nombre pair de guillemets), chaque valeur impaire dans la liste contiendra un élément entre guillemets.

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

Il s'agit également d'une approche plus rapide que les expressions régulières. Avec le module timeit, la vitesse de ce code est environ 4 fois plus rapide:

% 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
29
Roman

Expressions régulières sont bonnes à cela:

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