Извлечь строку из кавычек

В то время как наиболее ранжированные ответы ранжируются, он не разбивается на разделы. Вы можете сделать self Join, чтобы все это было разделено также:

SELECT    a.first_name,
      a.age,
      a.gender,
        count(b.age)+1 as rank
FROM  person a left join person b on a.age>b.age and a.gender=b.gender 
group by  a.first_name,
      a.age,
      a.gender

Use Case

CREATE TABLE person (id int, first_name varchar(20), age int, gender char(1));

INSERT INTO person VALUES (1, 'Bob', 25, 'M');
INSERT INTO person VALUES (2, 'Jane', 20, 'F');
INSERT INTO person VALUES (3, 'Jack', 30, 'M');
INSERT INTO person VALUES (4, 'Bill', 32, 'M');
INSERT INTO person VALUES (5, 'Nick', 22, 'M');
INSERT INTO person VALUES (6, 'Kathy', 18, 'F');
INSERT INTO person VALUES (7, 'Steve', 36, 'M');
INSERT INTO person VALUES (8, 'Anne', 25, 'F');

Ответ:

Bill    32  M   4
Bob     25  M   2
Jack    30  M   3
Nick    22  M   1
Steve   36  M   5
Anne    25  F   3
Jane    20  F   2
Kathy   18  F   1
24
задан troyane 18 May 2014 в 11:03
поделиться

3 ответа

>>> import re
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ')
['a', 'b', 'c']
42
ответ дан 28 November 2019 в 17:51
поделиться

Вы можете сделать 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
30
ответ дан 28 November 2019 в 17:51
поделиться

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

import re
quoted = re.compile('"[^"]*"')
for value in quoted.findall(userInputtedText):
    print value
12
ответ дан 28 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: