Заставить python рассматривать строку в кавычках как блок - PullRequest
4 голосов
/ 23 апреля 2019

Я делаю грамматику с использованием Pyparsing и хочу, чтобы она анализировала все вставки, даже те, которые имеют дату.Я не понимаю, как сделать quotedStrings целым блоком.

ident          = Word( alphas, alphanums + "_$" ).setName("identifier")
number         = Word(nums)

quotedString = "'" + delimitedList(number | ident , ".", combine=True) + "'"
quotedStringList = Group(delimitedList(quotedString))

insert_statement <<= (INSERT + INTO + tableNameList + VALUES + delimitedList(openingparenthese + quotedStringList + closingparenthese) + Optional(endLine))

data = "INSERT INTO test VALUES('2008-07-28 00:00:05', 'a');"
print (data, "\n", insert_statement.parseString( data ))

Я ожидаю получить что-то вроде:

['insert', 'into', ['test'], 'values', '(', ["'", '2008-07-28 00:00:05', "'", "'", 'a', "'"], ')', ';']

Но я получаю только:

Expected "'"

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Я не могу комментировать, поэтому я должен создать ответ Попробуйте использовать метод str(text).replace ("'", "\'") или с регулярным выражением

import re
re.sub(re.compile("'"),"\'", str(text))

Я не за клавиатурой, поэтому наберитесь терпения.Но я надеюсь, что это может как-то помочь

1 голос
/ 29 апреля 2019

Я не думаю, что эта ошибка случится со многими людьми, но самый простой способ процитировать строки ... состоит в том, чтобы использовать тот, что указан в pyparser from pyparser import quotedString, ... as pp, вместо того, чтобы пытаться создать свой собственный

Спасибо за ответы в любом случае, помог мне с другими проблемами

...