Извлечь строку из кавычек - PullRequest
20 голосов
/ 16 января 2010

Я хочу извлечь информацию из введенного пользователем текста. Представьте, что я ввел следующее:

SetVariables "a" "b" "c"

Как мне извлечь информацию между первым набором цитат? Тогда второй? Тогда третий?

Ответы [ 3 ]

35 голосов
/ 16 января 2010
>>> import re
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ')
['a', 'b', 'c']
27 голосов
/ 16 января 2010

Вы можете сделать string.split () для него.Если строка правильно отформатирована с помощью кавычек (то есть четного числа кавычек), каждое нечетное значение в списке будет содержать элемент, который находится между кавычками.

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

Это также более быстрый подход, чем регулярные выражения.С модулем timeit скорость этого кода примерно в 4 раза выше:

% 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
11 голосов
/ 16 января 2010

Регулярные выражения хороши в этом:

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