anyNeT
Июнь 26, 2009 16:04:00
Привет всем. Пытаюсь распарсить sql-запрос:
INSERT INTO ‘table’ VALUES(231, ‘asda’, 923, ‘hello’, ‘asd’, 123, ‘one’)
В скобках VALUES() идут значения через запятую. Нужно получить только 5, 6 и 7 значения.
Пока вот что пришло в голву:
VALUES\({4}(+)\)
Но не работает. Буду благодарен, кто подскажет.
slav0nic
Июнь 26, 2009 16:47:21
anyNeT
Июнь 26, 2009 17:40:59
Что-то интересное, но я не разобрался, как сделать нужное мне.
pasaranax
Июнь 26, 2009 21:10:46
import re
query = "INSERT INTO 'table' VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')"
part = re.findall("(?<=VALUES\().*(?=\))", query)
values = part[0].split(",")
print values
sypper-pit
Июнь 26, 2009 21:53:09
pasaranax
ты немного не понял , он показал что добавил в базу эти строчки и ему затем надо их вытинуть из БД, также у него может быть этих значений не известно сколько , а нужно только значение 5,6,7
anyNeT
Июнь 26, 2009 22:19:02
sypper-pit, нет, распарсить нужно именно cам sql-запрос.
pasaranax, именно так я пока что и сделал. а хотелось бы регулярное выражение именно для получение значений в скобках начиная с 5.
pasaranax
Июнь 27, 2009 00:16:27
import re
query = "INSERT INTO 'table' VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')"
values = re.search("VALUES\((.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)\)", query)
print values.groups()
Напечатает кортеж, но это только для случая с 7 параметрами, иначе части не выделить. Зато этот вариант будет быстрее первого, потому что нет просмотра назад и вперед.
sypper-pit
Июнь 27, 2009 14:01:10
тогда прошу прощения :) pasaranax
Ed
Июнь 27, 2009 14:38:39
anyNeT
Пока вот что пришло в голву:
VALUES\({4}(+)\)
Но не работает. Буду благодарен, кто подскажет.
Так пойдет?
print re.match('VALUES\((?:([^,\s]+)[,\s]+){5}([^,\s]+)[,\s]+([^,\s]+)\)', "VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')").groups()
("'asd'", '123', "'one'")
anyNeT
Июнь 27, 2009 15:48:25
спасибо =)